我正在尝试编写一个简单的代码来给出n项谐波系列之和的输出。当我编写并执行以下代码时
for(i=1;i<=n;i++)
sum = sum + (1/i);
我无法获得所需的输出。输出显示为sum = 1.000000
,而相同的代码安静如果如下:
for(i=1;i<=n;i++)
sum = sum + (1/(float)i);
实际输出:sum = 2.283334
有人可以解释这里的类型转换如何影响输出吗?
答案 0 :(得分:0)
计算机认为(1 / i)应该是整数。当1除以i时,小数部分被删除以获得整数值。由于1 / i导致0.xxxx,当小数部分被丢弃时,你留下0.将i改为浮点数告诉它该数字应该是一个浮点数。如果您愿意,可以使用sum = sum + (1.0/i);
获得类似的结果。