存在双精度数据类型d和浮点数据类型f。 1)d * d始终大于或等于0.0? 2)(f + d)-f总是等于d?
答案 0 :(得分:2)
您的问题应提及一种编程语言。既然没有,我们只能根据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,则表明加法期间二进制数字已丢失。