|
|
1
53
这是因为在你的陈述中
但是正如Michael在下面的评论中所建议的,您永远不应该测试浮点值的精确相等性。 |
|
2
14
甚至可以说,对于无法准确表示的文字浮点常量,应该有一个编译器警告,特别是当标准对于是否在运行时以设置为该时间的模式进行舍入或在编译时以另一种舍入模式进行舍入非常模糊时。
所有可以精确表示的非整数都具有
|
|
3
13
我们需要把所有的数字(2的幂)加起来,再加上1(通常是1,以此类推)。它是
**
|
|
|
4
2
这是关于语言的。该语言说0.7是双精度的,除非使用这种语法0.7f,否则它是单精度的。所以
单3f333333 双3FE666
双倍是
就像10进制的1/3是0.3333。。。永远。我们这里有一个重复的模式0110
这就是答案。
将分数加倍是一种错误
这不等于
这种提升不会发生,因为相同的位模式会相互比较。 为什么1.0可以工作?
哈尔夫丹投票率最高且经过检查的答案是正确的答案,这是一种混合精度的情况,你永远不应该进行相等的比较。 答案中没有说明原因。0.7使1.0无法工作。没有显示0.7失败的原因。重复的问题1.1也失败了。 编辑 在这里,我们可以从这个问题中取出来,这是一个已经得到回答的不同问题,但这是同一个问题,也有“什么……”的初始冲击。
少于。
但是,当从双精度转换为单精度时,或者在表示一般情况时 作为一个单一的IEEE 754。
大于
因此,不必讨论使用equals,问题仍然是0.7是双0.7f是单,如果它们不同,则运算将提升到最高精度。 |
|
|
5
1
更好的做法是做如下事情
由于舍入或初始化误差不太可能超过FLT_EPSILON的值,因此这将为您提供所需的可靠等效性测试。 |
|
|
6
1
|
|
7
0
考虑一下:
如果
(0.7>(a)
例子:
输出:
|
|
|
8
-2
如果更改的数据类型 F 到 双重的 ,它会打印出来 平等的 ,这是因为浮点中的常量存储在 双重的 并且不漂浮在水中 ,双精度高,浮点精度低,双值存储在 64 位二进制和浮点值存储在 |