Это характер представления с конечной точностью.
Я буду использовать аналогию с десятичным представлением с фиксированной точностью. Вы представляете 1/3 как 0.333333
и 2/3 и 0.666667
. Так что если вы сделаете 2/3 - 1/3 - 1/3
, результат будет 0.000001
. Вы, вероятно, отобразите это как 0.000
, так как больше нет смысла отображать больше цифр. Но это не совсем равно нулю.
Не сравнивайте числа с плавающей запятой таким образом, потому что ответ изменится с да на нет даже с малейшей неточностью. Если вы хотите написать функцию «очень, очень близко к», сделайте это.