Как сделать высокоточную арифметику с плавающей запятой в математике

В Мма, например, я хочу вычислить

1.0492843824838929890231*0.2323432432432432^3

Но он не показывает полной точности. Я пробовал N или различные другие функции, но ни одна из них не работала. Как этого добиться? Большое спасибо.


person Qiang Li    schedule 20.01.2011    source источник
comment
@wallyk Mathematica — это среда программирования.   -  person Dr. belisarius    schedule 20.01.2011


Ответы (3)


Когда вы указываете числа с помощью десятичной точки, они должны иметь MachinePrecision, примерно 16 цифр, поэтому результаты обычно содержат менее 16 значащих цифр. Вы можете добиться бесконечной точности, используя рациональные/алгебраические числа. Если вам нужна конечная точность, которая лучше, чем по умолчанию, укажите свои числа следующим образом.

123.23`100

Это заставляет Mathematica интерпретировать число как имеющее 100-значную точность. Так что вы можете сделать

ans=1.0492843824838929890231`100*0.2323432432432432`100^3

Проверьте точность окончательного ответа, используя Precision

Precision[ans]

Проверьте tutorial/ArbitraryPrecisionNumbers для более подробной информации

person Yaroslav Bulatov    schedule 20.01.2011

Вы можете сделать:

r[x_]:=Rationalize[x,0];

n = [email protected] ([email protected])^3  

Вне:

228598965838025665886943284771018147212124/17369643723462006556253010609136949809542531

А теперь, например

N[n,100]  

0.01316083216659453615093767083090600540780118249299143245357391544869\
  928014026433963352910151464006549
person Dr. belisarius    schedule 20.01.2011
comment
Но что, если я действительно хочу получить точный результат для такого выражения? Я знаю, что самый глупый способ — умножить целое число, а затем разделить на соответствующие степени 10. Есть ли другой удобный способ? Большое спасибо - person Qiang Li; 20.01.2011
comment
@Qiang Я считаю Rationalize наиболее удобным способом, поскольку он управляет периодическими десятичными знаками до конца вычисления, а затем (когда я хочу) обрезает хвост, чтобы он соответствовал моему желаемому размеру. - person Dr. belisarius; 20.01.2011

Иногда вы просто хотите увидеть больше результатов машинной точности. Это несколько методов.

(1) Поместите курсор в конец строки вывода и нажмите Enter (не на цифровой клавиатуре), чтобы скопировать вывод в новую строку ввода, отображающую все цифры.

(2) Используйте InputForm как в InputForm[1.0/7]

(3) Измените настройку PrintPrecision с помощью инспектора параметров.

person Mr.Wizard    schedule 18.02.2011