在C中比较相同的浮点值
比较float和float literal的奇怪输出
我读了上面关于浮点的链接,但甚至得到奇怪的输出。
#include<stdio.h>
int main()
{
float x = 0.5;
if (x == 0.5)
printf("IF");
else if (x == 0.5f)
printf("ELSE IF");
else
printf("ELSE");
}
现在按照推广规则,“其他如果”难道不是必须印出来的吗?
但是,这里是打印“if”
浮点数永远不准确。
这种说法是错误的。有些浮点数是精确的,如1.0、12345.0、12345.5、-2.25。所有这些数字都可以表示为乘以2的幂的整数。所有不能的数字也是不准确的。
在您的特定情况下,浮点x=0.5
将导致x
具有1.00000000*2^-1
值。当您将其与double 0.5
进行比较时,两个操作数都转换为double
,因此比较变为1.0000000000000000000*2^-1==1.00000000000000000*2^-1
,这将成功。
对于float x=0.1
,它看起来不一样。该值存储为1.01010101*2^-3
(或类似)。注意,这已经不精确了。当您将此与double 0.1
进行比较时,浮点数在末尾以零扩展,则比较变为1.010101010000000*2^-3==1.010101010101010101010*2^-3
,这将失败。
问题内容: 我刚刚阅读了有关浮点值比较的声明 不得使用==或!=运算符比较浮点值。大多数浮点值没有精确的二进制表示形式,并且精度有限。 如果是这样,比较两个浮点值的最佳方法是什么? 问题答案: 以下扩展方法对于实现Kevin的建议可能有用: 现在,您可以执行以下操作: 只需将更改为更合适的名称,或在需要时将默认边距更改为比更好的值。
对于这些代码行,我得到0作为输出,即它们都是相等的。现在,如果我理解正确,a b和c可能会存储稍微不同版本的真值.3因此,当做一个Float.compare(...)对这些值,我希望得到一个输出值,而不是0。为什么我把它们取为0?
问题内容: 我遇到此行的问题(在下面评论): 输出。 但是,输出。 现在,我不明白为什么我得到这个结果: 问题答案: 您缺少一组括号: 在您的版本中,正在通过与进行比较,这不是您想要的。 通常,的优先级高于,这就是为什么将其评估为的原因。
在C中,如果我们执行以下代码: 上面的代码打印“更少”。 但如果我们执行以下代码: 它打印“否”。 原因是什么?浮点数据类型是如何工作的?
我知道使用是因为分辨率无关的坐标系。 与,,,,比较时不是容易出现误报吗?它是一个浮点,它们有不精确的问题:例如。 在比较时是否在内部处理这个问题,或者是否会发生读取为零的与不比较为true的情况?
问题内容: 我正在使用jmh 使用maven并按照http://openjdk.java.net/projects/code- tools中 建议的命令行方法对一个简单的应用程序进行基准测试。成功设置并建立基准后,我可以使用avgt模式获得以下基准结果: 我不确定如何解释此输出,但我确定某些地方出了错…?知道什么或如何调试吗? 问题答案: JMH输出使用扩展的Unicode字符。特别是, ?10