Python использует IEEE 754 doubles для своих плаваний. Поэтому вы должны лечить что-либо после 15 значимых цифр или как научная фантастика. И это только для недавно инициализированного номера. Когда вы начинаете делать операции с поплавками, вы можете потерять больше точности, особенно делая сложение или вычитание между числами, которые значительно различаются по абсолютной величине.
OTOH, делая вычитание между числами очень близко друг к другу по величине может привести к catastrophic cancellation.
Если вы будете осторожны, вы можете уменьшить влияние этих проблем, но вам необходимо знать, как работает арифметика с плавающей запятой, и корректные данные.
В качестве альтернативы вы можете работать с библиотекой, которая обеспечивает более высокую точность, например, десятичный модуль Python. Вам все равно нужно позаботиться о том, чтобы избежать катастрофической отмены и других проблем, которые приводят к потере значимости, но по крайней мере у вас есть более значимые цифры.
Модуль Decimal предоставляет простые арифметические операции. Если вам нужны передовые математические функции, такие как триггерные и экспоненциальные функции, взгляните на отличный сторонний модуль произвольной точности математики mpmath. Он может обрабатывать сложные числа, решать уравнения и выполнять некоторые операции исчисления.
Похоже, что python делает целочисленное вычитание или анализирует результат на целое число. Можете ли вы точно показать, как вы назначаете значения и как вы вычисляете результат? Просто скопируйте код связанного кода, пожалуйста. – FallenAngel
См. Также http://sopython.com/canon/87/why-is-this-particular-floating-point-math-operation-not-giving-the-correct-answ/ – tripleee
Номера с плавающей запятой в основном представляют значимые цифры , поэтому вы не можете отслеживать небольшие различия между большими числами. Поскольку ваш 'a' составляет 16 цифр, не осталось« комнаты », чтобы также представить дробную разницу.В каком контексте вы участвуете в том, что вам нужно отслеживать различия, которые настолько малы по сравнению с участвующими цифрами? – BrenBarn