#list #printf #maxima #wxmaxima
Вопрос:
В настоящее время что-то вроде 0.9*120
возвращает 1.08 2
, в то время как я хотел бы установить значение по умолчанию для всех чисел, возвращаемых в ненаучной нотации.
Я нашел fix
в документации; однако это решение подходит только для целочисленных значений.
Я нашел несколько старых сообщений в списке рассылки Maxima на source forge, но предлагаю использовать printf
с ~f
— нет ли способа сделать этот формат по умолчанию? или действительно нужно конвертировать каждое значение по отдельности?
Комментарии:
1. Хм, я этого не вижу. Когда я ввожу
0.9*120;
wxMaxima, отображается результат108.0
. Вы изменили какие-либо настройки дисплея? В функции, вызываемой для форматирования поплавков для отображения, как в wxMaxima, так и в максимумах командной строки, поплавки печатаются без научной записи для 0,001 <= x Вы смотрите на дисплей wxMaxima или на какой-то другой вывод? Возможно, пример поможет проиллюстрировать проблему.2. Спасибо, Роберт-похоже, наш системный администратор изменил значения по умолчанию на
pfprec
4 иfpprintprec
3, и я не знал, что они были изменены по умолчанию. Извините за это: я должен был проверить (wx)Maxima перед публикацией, я не ожидал, что эти значения по умолчанию будут изменены, но я обязательно перепроверю в будущем, прежде чем публиковать 🙂 Я предполагаю, что это ожидаемое поведение с учетом этих изменений в настройках (amp; проверит версию терминала). Спасибо за вашу помощь. Надеюсь, все будет хорошо!3. @RobertDodier возможно ли печатать значения > 10000000.0 без научной записи?
fpprintprec
не похоже, что это подходящая команда для этого, но я больше ничего не смог найти в документах.4. Я посмотрел на рассматриваемый код и ограничения для формата с
nnne-nn
иnnne nn
фиксированы на 0,001 и 1e7. Работа над этим может быть довольно сложной. Возможно, самый простой способ-преобразовать в целое число с помощьюround
и отобразить его. Изменение ограничений кажется хорошей функцией; дайте мне подумать об этом.5. Спасибо @RobertDodier!
round
работал на меня. Это произошло при создании данных для визуализации, поэтому мне пришлось использовать оператор if, чтобы не округлять небольшие значения, но комбинация работала отлично. Спасибо за предложение-я не думаю, что я бы подумал об этом сам (по какой-то причине я предположил, что целые числа будут усечены таким же образом; вероятно, потому, что я думал об этом как о проблеме, связанной с отображением)
Ответ №1:
В моем случае значения по умолчанию для точности fpprec
с плавающей запятой и точности печати fpprintprec
с плавающей запятой были изменены нашим системным администратором, и я не знал об этом. Изменение их значений обратно на значения по умолчанию решило проблему.
Значения по умолчанию, согласно документации, на момент написания, являются:
fpprec:16;
fpprintprec:0
Как объясняется в документации fpprintprec
для:
Для обычных чисел с плавающей запятой, когда
fpprintprec
имеет значение от 2 до 16 (включительно), количество напечатанных цифр равноfpprintprec
. В противном случае значение fpprintprec равно 0 или больше 16, а количество напечатанных цифр равно 16.