(wx)Максимумы: отключите научную нотацию

#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.