|
20鱼币
5^6 不是等于15625吗 c语言为什么显示15624呀
#include <stdio.h>
#include <math.h>
int main()//计算:1^2 + 2^3 + 3^4 + 4^5 + 5^6 + 6^7 + 7^8 + 8^9
{
int c,number1=1,number2=1,sum=0;
for (number1=1;number1<=8;number1++)
{
number2++;
c=pow(number1, number2);
sum+=c;
printf("当前number1的值%d 当前number2的值%d 当前c的值%d\n",number1,number2,c);//5^6 =15625
}
printf("当前sum的值%d ",sum);
}
本帖最后由 stein 于 2021-6-7 11:42 编辑
原因是pow()函数是double类型的,函数原型如下。
double pow(double x, double y)
你定义的变量是整形,在强制转换的时候就有可能出错,把5^6=15624.999999,强转成了15624。
你用VS2019,编译器会报错: warning C4244: “=”: 从“double”转换到“int”,可能丢失数据
意思就是函数是double类型,你传递的是int类型,就把0.999999....丢失了
你可以改成这样就不会错了。
- #include <stdio.h>
- #include <math.h>
- int main()//计算:1^2 + 2^3 + 3^4 + 4^5 + 5^6 + 6^7 + 7^8 + 8^9
- {
- double c, number1 = 1, number2 = 1, sum = 0;
- for (number1 = 1; number1 <= 8; number1++)
- {
- number2++;
- c = pow(number1, number2);
- sum += c;
- printf("当前number1的值%.0f 当前number2的值%.0f 当前c的值%.0f\n", number1, number2, c);//5^6 =15625
- }
- printf("当前sum的值%.0f ", sum);
- }
复制代码
|
-
最佳答案
查看完整内容
原因是pow()函数是double类型的,函数原型如下。
double pow(double x, double y)
你定义的变量是整形,在强制转换的时候就有可能出错,把5^6=15624.999999,强转成了15624。
你用VS2019,编译器会报错: warning C4244: “=”: 从“double”转换到“int”,可能丢失数据
意思就是函数是double类型,你传递的是int类型,就把0.999999....丢失了
你可以改成这样就不会错了。
|