#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