<分区>
求以下数列的无穷和:
1 1/2 1/3 1/4 1/5 ...
根据某位科学家的解释,无限就是那个点,超过这个点任何一点都不存在,即inf + x = inf 或者inf ~ (inf + x) = 0。因此,基于这个理论,使用了以下算法:
float sum=0.0;
for(int i=0;;i++){
if((sum+(1.0/i))==sum)
break;
sum+=(1.0/i);
}
/* print the value of sum */
该算法在 C 和 JAVA 中运行,两者都给出了 inf 的输出。用C和Java写的打印语句分别是
printf("%6f",sum);
System.out.println(sum);
编辑: 之前写的代码(在问题中)有一个错误,因为我输入了它,没有复制粘贴。对不起。正在解决,这是我提出问题的代码:
float sum=0.0;
for(int i=1;;i++){
if((sum+ (1.0/i))==sum)
break;
sum+=(1.0/i);
}
/*print the value of sum*/
我的一个 friend 说他在 C 中得到的输出是有限小数。但在我的例子中,程序从未终止,在 C 和 Java 中(此输出来自上面发布的新编辑代码。不要考虑以前的错误的代码,它的输出是“INF”。)我的问题是,这个算法可以接受吗?如果是,那么我想知道在 C 中导致不同输出的可能性。谢谢。