Я пытаюсь сделать программу Python, которая отображает Tupper's self-referential formula, и у меня возникли некоторые проблемы.Неточные поплавки в самореферентной формуле Tupper
Сначала моя программа не могла справиться с большими поплавками, с которыми ей приходилось обращаться, поэтому я решил использовать BigFloats
, чтобы разобраться в моих проблемах. Это сработало. Моя проблема заключается в том, что у меня есть 540 цифр, число которых необходимо умножить на BigFloat
, и когда я делаю это, он округляет число, делая его неточным, что вызывает проблемы позже. Я попытался поднять precision
до 1000, и он все равно продолжает округлять переменную.
Дело в том, что некоторые цифры могут обрабатываться без BigFloat
до точного значения, но некоторые номера не могут обрабатываться нормально и с BigFloat
прямо сейчас.
Вот один из расчетов, что идет не так (это один может быть обработан без BigFloat
):
import bigfloat
y = 960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719
x = 0
with bigfloat.precision(1000):
(y//17 * bigfloat.pow(2,0)) % 2
Этот код должен возвращать 1, но вместо этого он возвращает 0.
Есть способ сделать BigFloat
более точным, чтобы я мог использовать его в своей программе?
К 'bigfloat' задачи: (1) не использовать BigFloat; вместо этого используйте gmpy2, и (2) точность в bigfloat - это количество * бит *, а не число десятичных цифр. Для 540 цифр вам потребуется около 1800 бит точности. Если вы попытаетесь с точностью 2000, вы увидите '1', который вы ожидаете. –