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, но по крайней мере это не бессмысленно.
Я новичок в Scilab, но я, вероятно, должен был рассмотреть возможность поиска функции printf. Спасибо, это именно то, что мне нужно. –