adi*_*i99 0 c integer-division fractions implicit-conversion
在下面的代码中,为什么除非我放入term = 1.0/n而不是 when ,否则我不会得到有效的结果term = 1/n。我已将 term 声明为浮动,这还不够吗?
#include <stdio.h>
int main()
{
float sum = 0, term;
int n, i;
printf("enter the value of n:\n");
scanf("%d", &n);
term = 1.0 / n;
for(i = 1; i <= n; i++)
{
sum = term + sum;
}
printf("Sum = %.3f\n", sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在下面的代码中,为什么除非我放入
term = 1.0/n而不是 when ,否则我不会得到有效的结果term = 1/n。我已声明term为float. 这还不够吗?
抱歉不行。
ISO/IEC 9899:2017 §6.5.5 6 规定:
当整数被除时,
/运算符的结果是代数商,其中任何小数部分都被丢弃。105)如果商a/b是可表示的,则表达式(a/b)*b + a%b应等于a[...]105)这通常被称为“向零截断”。
翻译:两个整数相除的结果是一个整数。
即使将它分配给 afloat或double变量也不够,它会在分配之前被截断,解决方案是将小数表达式中的一个操作数转换为浮点数或双精度数,就像您所做的那样。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |