Точность Mathematica отличается от других калькуляторов

#wolfram-mathematica #precision

#wolfram-mathematica #точность

Вопрос:

Если я оцениваю следующий ввод в Mathematica 12:

 SetPrecision[DecimalForm[123.432654/54.1122356, 130], 130]
 

Результат:

 2.2810488724291406725797060062177479267120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000
 

Когда я выполняю те же вычисления в других калькуляторах, результаты равны до 15-й цифры результата Mathematica: 2,281048872429140. Однако, начиная с 16-й цифры, другие калькуляторы показывают одинаковый результат, тогда как Mathematica показывает другой результат:

Калькулятор Windows: 2,281048872429140 591633586101550

https://keisan.casio.com/calculator: 2.281048872429140591633586101550[…..]

https://www.mathsisfun.com/calculator-precision.html: 2.281048872429140591633586101550[…..]

Mathematica: 2.281048872429140672579706006217[…..].

Почему (только) Mathematica в конечном итоге дает другой результат?

Может ли Mathematica каким-то образом получить тот же результат, что и другие калькуляторы (предполагая, что эти единодушные результаты являются правильными)?

Ответ №1:

Модель приблизительных десятичных чисел Mathematica отличается от почти всех остальных моделей приблизительных десятичных чисел.

Из-за количества цифр, которые вы указали для каждого из 123.432654 них, и 54.1122356 они считаются и обрабатываются как MachinePrecision числа. Это означает, что они имеют обычную «точность около 16 цифр, предоставляемую аппаратным обеспечением CPU с плавающей запятой на вашем компьютере, но это немного сложнее.

Из-за правил приоритета Mathematica сначала оценивает каждое из этих чисел и преобразует их во внутреннюю форму с плавающей запятой с ограниченной точностью и всеми проблемами, которые возникают, и всей скоростью, позволяющей выполнять вычисления аппаратно, а не программно.

Затем он выполнил деление с использованием внутреннего оборудования с плавающей запятой, что привело к получению другого MachinePrecision числа с точностью всего около 16 цифр.

Затем DecimalForm вы попросили Mathematica экстраполировать этот результат, содержащий всего около 16 правильных цифр, на 130-значный дисплей.

Все или почти все, с некоторыми очень тонкими деталями в темных углах, функции * Form предназначены и используются только для создания чего-то, что может отображаться и не использоваться для дальнейших вычислений. Например, новые пользователи обычно делают m=MatrixForm[mymatrix] , чтобы увидеть красивое форматирование матрицы, а затем продолжают пытаться выполнить вычисления m , что приводит к сбою.

Затем вы попросили Mathematica выполнить SetPrecision функцию на этом дисплее, чтобы попытаться превратить это в число с точностью до 130 бит. Я даже не могу догадаться, что это действительно сделало внутренне.

Комментарии:

1. Билл, спасибо за дополнительное объяснение!

Ответ №2:

Похоже, что эти другие калькуляторы предполагают, что точность введенных чисел бесконечна. WL этого не делает. Вы можете указать, какую точность имеют введенные числа, например

 123.432654`30/54.1122356`30

2.28104887242914059163358610155