Квадрат двойной переменной всегда положительный? - PullRequest
0 голосов
/ 15 октября 2019

Существует двойной тип данных, d и тип данных с плавающей точкой f. 1) d * d всегда больше или равно 0,0? 2) (f + d) -f всегда равно d?

1 Ответ

2 голосов
/ 15 октября 2019

Ваш вопрос должен упомянуть язык программирования. Поскольку это не так, мы можем отвечать только в соответствии с правилами стандарта 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 из этого, вы обнаружите, что двоичные цифры были потеряны во время сложения.

...