#include<stdio.h>
#include<conio.h>
main()
{
float i=0.0;
while(i!=1.0)
{
i+=0.1;
printf("%f",i);
}
getch(
}
为什么它的输出是无限的?有人知道应该做些什么来使这个有限吗?
浮点数不精确。
因此,像平等这样的东西早就飞出窗外了。
在你想迭代浮点数的情况下,你应该考虑迭代整数并用浮点数除法。
在您的情况下:
#include<stdio.h>
main()
{
int i=0;
while(i!=10)
{
i+=1;
printf("%f",i/10.0f);
}
}
通过这种方式,您可以获得最佳近似值,并且不会因为添加浮点数而产生累加舍入误差。
循环是无限的,因为在计算机的浮点运算中,十次加0.1并不等于1。
这是因为计算机使用二进制数进行算术运算,数字0.1
不能表示为终止二进制数。因此,计算机必须选择一个二进制数,该二进制数确实终止,并且适合于浮点
,作为0.1的近似值。不幸的是,将该近似值的十个副本相加并不能创建等于1的浮点值,这是不够精确的。
如果更改循环中的格式字符串以显示更高的精度,则可以看到循环中i
的值不精确:
0.10000000149011611938
0.20000000298023223877
0.30000001192092895508
0.40000000596046447754
0.50000000000000000000
0.60000002384185791016
0.70000004768371582031
0.80000007152557373047
0.90000009536743164062
1.00000011920928955078
通常,不应比较浮点数是否相等。您可以使用不等式比较,检查两个数字是否几乎相等,检查它们的差值是否小于ε的某个小固定值,或者使用整数进行迭代,并仅在需要时转换为浮点。其他答案已经解释了这些备选方案,所以我不在这里讨论它们。
问题内容: 当我多次(docs)运行时,每次输出都不同。 我究竟做错了什么?为什么不是恒定的? 问题答案: 由于每次调用该函数时都会随机生成盐,因此生成的密码哈希也不同。返回的哈希值包含生成的盐,因此仍可以正确验证密码。 演示: 这两个字符串不同。但包含足够的信息来验证密码,因为生成的盐包含在每个密码中: Because the random salt is for one and , the r
它给出的输出为“cricket”。但我不明白为什么?http://ideone.com/fteahg
我的代码出现错误: 我的示例的完整代码如下:
问题内容: 我是Java的新手,所以我编写了这段代码,以便将这整个五年都称为布尔值,并为所有布尔值生成答案。但是,它仅调用最后一个。我该怎么做呢? 问题答案: 您每年需要使用单独的对象,或者至少在创建该年份的对象后立即调用the年检查方法。 您所拥有的是对函数的一系列调用,该函数将值分配给同一对象的属性。因此,只有最后一条语句才起作用,因为先前的值将被覆盖。 另外请注意,您的代码似乎没有正确组织。
我想5是int。但没有变数。我不知道为什么输出是双倍。我已经试过Netbeans了。
我是java初学者,我对上述程序的输出感到困惑。请给我解释一下输出的原因。