2016-06-23 7 views
1

Я работаю с Scilab 5.5.2, и при использовании команды format я могу отображать не более 25 цифр числа. Есть ли способ показать что-то большее, чем это число?Есть ли способ отображать более 25 цифр при выводе в Scilab?

Примечание: Я понимаю любые проблемы «Почему мне нужно видеть более 25 цифр?». но это немного длинная история, которая должна быть действительно исключена.

ответ

1

Scilab работает с номерами с плавающей точкой двойной точности; он не поддерживает арифметику с переменной точностью. Двойная точность означает относительную погрешность% eps, которая составляет 2^(- 52), приблизительно 2е-16.

Это означает, что вы даже не можете получить 25 правильных десятичных цифр: при использовании формата (25) вы получаете мусор в конце. Например,

format(25); sqrt(3) 

возвращает 1.732050807568877 1931766

Я отделил последние 7 цифр здесь, потому что они не правы; правильное значение SQRT (3) begins with

 1.732050807568877 2935274 

Конечно, если вы не возражаете цифры будучи неправильно, вы можете иметь столько, сколько вы хотите:

strcat([sprintf('%.15f', sqrt(3)), "1111111111111111111111111111111"]) 

возвращается 1.7320508075688771111111111111111111111111111111.

Но если вы хотите иметь произвольное превышение действительных чисел, Scilab не подходит для работы (исправление: Lưu Vĩnh Phúc указало Multiple Precision Arithmetic Toolbox, который может сработать для вас). Из бесплатных пакетов программного обеспечения mpmath Python library реализует произвольную точность действительных чисел: его можно использовать напрямую или через Sagemath или SymPy. Коммерческие пакеты (Matlab, Maple, Mathematica) также поддерживают переменную точность.

Что касается Scilab, я рекомендую использовать отформатированные команды печати, такие как fprintf или sprintf, потому что они действительно заботятся о том, чтобы результат был значимым. Пример: printf('%.25f', sqrt(3)) возвращает

1.7320508075688772000000000 

с мусором заменяются нулями. Последняя отличная от нуля цифра все еще выключена на 1, но по крайней мере это не бессмысленно.

+0

Я новичок в Scilab, но я, вероятно, должен был рассмотреть возможность поиска функции printf. Спасибо, это именно то, что мне нужно. –

0

Scilab uses double-precision floating-point type, который имеет 53 бит мантиссы и может быть точным только до ~ 15-17 цифр. Нет причин печатать цифры за этим.

Если 25 цифр точности необходимо, то вы можете использовать quadruple precision или double-double arithmetic библиотеку как ATOMS: Multiple Precision Arithmetic Toolbox details

Если вам нужно еще больше точности, то единственным способом является использование произвольной точности библиотеки как mpscilab, Xnum и т.д ..

+0

Ключевое слово моего вопроса - «отображение», а не «вычисление». Я не хочу повышать точность вычислений Scilab, просто чтобы отобразить большее количество цифр, независимо от того, насколько они правильны. Спасибо за ваш ответ. –