Пи дает 1,0, и я не могу понять, почему за ним. Нужна помощь в понимании основной науки - PullRequest
1 голос
/ 29 января 2020

Я создал простую функцию, чтобы решить e на степень пи, объясненную здесь

def e_to_power_pi(number):
    return (1 + (1/number)) ** (number * math.pi)

, на первый взгляд, явно простой кусок кода. Но посмотрите на разницу между этими двумя значениями:

Пример первый:

e_to_power_pi(1000000000000000)

вывод:

32.71613881872869

Пример два:

e_to_power_pi(10000000000000000)

вывод:

1.0

после разрыва кода, я узнал, что 1.0 идет из этой части 1 + (1 / число) кода выше.

Когда я продолжил его, я узнал, что 1/10000000000000000 выводит правильный ответ, как и должно быть 0.00000000000000001.

Но когда я добавляю 1 к результату, он возвращает 1.0 вместо из 1.00000000000000001.

Я предположил, что это должно быть округление по умолчанию в python, которое может изменять значение.

Я решил использовать round(<float>, 64) # where <float> is any computation taking place in code above, чтобы попытаться получить 64 знака после запятой. Но все же я застрял с тем же результатом, когда было выполнено сложение, то есть 1.0.

Может ли кто-нибудь направить меня или указать мне направление, в котором я могу узнать или дополнительно прочитать об этом?

1 Ответ

2 голосов
/ 29 января 2020

Вы используете двоичный формат с плавающей запятой двойной точности, с 53-битным значением и точностью, которого недостаточно для представления вашей дроби:

10000000000000001/10000000000000000 = 1.0000000000000001

См. IEEE 754 двойной точности двоичный формат с плавающей точкой: binary64

Mathematica может работать с точностью, превышающей точность, наложенную на архитектуру машины.

См. Wolfram Язык: MachinePrecision

Приведенный ниже снимок экрана Mathematica показывает, что для получения результата, отличного от 1., вам понадобится значение и точность выше , чем у 53-битного.

N оцифровывает дробный результат с требуемой точностью. Точность станка используется по умолчанию; вычисления с более высокой точностью выполняются в программном обеспечении.

enter image description here

...