#include <stdio.h>
int fun ( int n )
{ int a, b, c, k; double s;
s = 0.0; a = 2; b = 1;
for ( k = 1; k <= n; k++ ) {
s = s + (double)a / b;
c = a; a = a + b; b = c;
}
return s;
}
main( )
{ int n = 5;
printf( "\nThe value of function is: %lf\n", fun ( n ) );
}
第六行的(double)a/b;能不能换成(double)(a / b);有什么影响?
不可以。
前者是先将a强转为double型,然后除以b。由于类型侵蚀,使得这个计算过程全部都是按照double型进行的。
而后者是先计算a/b,都是按照int型计算的,再将结果强转为double型。因此结果偏差极大。
前者是先将a强转为double型,然后除以b。由于类型侵蚀,使得这个计算过程全部都是按照double型进行的。
而后者是先计算a/b,都是按照int型计算的,再将结果强转为double型。因此结果偏差极大。
温馨提示:答案为网友推荐,仅供参考