Ваш вопрос должен упомянуть язык программирования. Поскольку это не так, мы можем отвечать только в соответствии с правилами стандарта IEEE 754 с плавающей точкой, и язык программирования может не отображать свою конструкцию в соответствии с IEEE 754 так, как вам бы хотелось.
1) значения с плавающей точкой могут быть конечными, бесконечными или NaN. Для конечных и бесконечных значений применяется обычное правило знаков: - * - производить + и + * + производить +, так что для конечного или бесконечного d
мы имеем d * d ≥ 0
. Если d
равно NaN, то d * d
равно NaN
, а значение NaN
не больше или равно 0
2) (f + d) - f
не равно d
для большинствазначения d
и f
. Одним из примеров является f = 2 100 и d = 1. Для этих значений (f + d) - f
равно 0. Проблема видна даже при значениях f
и d
, которые ближе друг к другу,например, f = 10 и d = 0,1. С этими значениями f + d
- это число, близкое к 10. При фиксированном количестве значащих двоичных цифр пробел, взятый для представления 10.…
, не позволяет сохранить все двоичные цифры, присутствующие в представлении 0.1
,Снова вычитая 10 из этого, вы обнаружите, что двоичные цифры были потеряны во время сложения.