Python: Как определить, какие значения с плавающей точкой могут быть точно представлены, и вывести предупреждение, когда нет? - PullRequest
0 голосов
/ 15 мая 2019

Я знаю, что моя версия python использует 64-битное представление, поэтому должна быть некоторая формула для расчета, какие числа с плавающей точкой точно представимы.

>>> 3.00000000000000022203 == 3.0
True
>>> 3.00000000000000022205 == 3.0
False

Как бы я правильно поймал, когда уровень точности не может быть точно представлен?

Если целью является проверка того, что что-то представимо как Python float (а не просто точно представимый в произвольной точности двоичная с плавающей точкой), затем проверка, что знаменатель является степенью двух не достаточно: вам также нужно проверить, что числитель соответственно ограничен. (И этого недопущения и переполнения избегают.) Для простой контрпример, рассмотрим случай 10 ** 23 - Марк Дикинсон из Как определить, можно ли представить десятичную дробь точно в виде числа с плавающей точкой Python?

В этом посте говорилось только о том, как обрабатывать десятичные дроби, но не слишком большие числа.

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете рассчитать, может ли ваш литерал с плавающей точкой быть точно представлен, но что он мог бы сделать, чтобы вызвать исключение? Если вы использовали поплавок, это потому, что он вам нужен. Может быть, я не понимаю, что вы пытаетесь сделать.

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

...