Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 浮点加法和除法_Loops_Floating Point_Floating Point Precision - Fatal编程技术网

Loops 浮点加法和除法

Loops 浮点加法和除法,loops,floating-point,floating-point-precision,Loops,Floating Point,Floating Point Precision,对于此代码段 double count = 0.0; while( count != 1.0) {count += 1.0/3;} 我想知道(IEEE 754)的哪些部分会导致计数3:为1.0而不是.9999999999。我意识到,由于二进制数字的数量是无限的,所以一般的原因是四舍五入,但如果有人能更详细地解释(IEEE 754)背后的细节,我将不胜感激 没有一般规则可以确保添加n副本的1.0/n将产生确切的1.0。可以通过在以下程序中更改n来探索这一点: import java.math.B

对于此代码段

double count = 0.0;
while( count != 1.0)
{count += 1.0/3;}

我想知道(IEEE 754)的哪些部分会导致计数3:为1.0而不是.9999999999。我意识到,由于二进制数字的数量是无限的,所以一般的原因是四舍五入,但如果有人能更详细地解释(IEEE 754)背后的细节,我将不胜感激

没有一般规则可以确保添加
n
副本的
1.0/n
将产生确切的
1.0
。可以通过在以下程序中更改
n
来探索这一点:

import java.math.BigDecimal;
公开课考试{
公共静态void main(字符串[]args){
int n=3;
double[]计数=新的双精度[n+1];

对于(int i=1;i)你在寻找什么样的细节?你似乎已经很好地总结了它。我想我想知道它们是否是这种情况的直接术语,因为我不确定我的教授是否会接受我的推理,为什么结果是1.0,而我的唯一答案是“因为四舍五入”。我不相信IEEE-754能保证这样的代码会成功。第一次,它可能不会成功(至少在一般情况下,它可能有特定的除数),在大多数现代平台上,但我想如果你让它运行足够长的时间,在环绕无穷大几次之后,它可能会达到完全正确的位模式,尽管…它也不能保证乘法。请尝试
1.0/49*49
@dan04。通常最好假设舍入错误,并注意少数特殊的ca这肯定是准确的。