![](/img/trans.png)
[英]Why does the function work with float properly but doesn't work with double?
[英]Why don't float operations work properly?
我是 C 的新手,但我之前曾在 C++ 和 C# 中编码。 我已将此代码编写为作业,但浮动操作无法正常工作。 它应该做的是,通过输入两个正整数 n 和 m,最终结果应该是和与 n 和乘法的平方根的和。
我的问题是,即使第一个总和有效,乘法和平方根(以及最后的总和)都不起作用。 最后,无论 n 和 mi 写什么两个数字,总和都是可以的,而其他两个将完全不准确——要么是 1,要么是乘法和最终的总和,要么是没有意义的东西(准确地说,“1 .#INF00")。
这是我写的代码。 有谁知道我做错了什么,或者我该如何解决这个问题?
float sum(int n)
{
float s = 0;
for(float i = 1; i<=(float)n; i++)
{
s += (2*i)/(3*i*i+4);
}
return s;
}
float multiplication(int m)
{
float p = 1;
for(float j = 1; j <= (float)m; j++)
{
p *= (float)(j*j+1);
}
return p;
}
int main()
{
int n;
int m;
scanf("%i", &n);
scanf("%i", &m);
float s = sum(&n);
float p = multiplication(&m);
float e = s + (float)sqrt(p);
printf("The sum is %f \n", s);
printf("The multiplication is %f \n", p);
printf("The final expression is %f \n", e);
getch();
return 0;
}
您应该将 integer 值而不是指针传递给函数sum
和multiplication
。
float sum(int n)
{
float s = 0;
for(float i = 1; i<=(float)n; i++)
{
s += (2*i)/(3*i*i+4);
}
return s;
}
float multiplication(int m)
{
float p = 1;
for(float j = 1; j <= (float)m; j++)
{
p *= (float)(j*j+1);
}
return p;
}
int main()
{
int n;
int m;
scanf("%i", &n);
scanf("%i", &m);
float s = sum(n); /* pass an integer, not a pointer */
float p = multiplication(m); /* pass an integer, not a pointer */
float e = s + (float)sqrt(p);
printf("The sum is %f \n", s);
printf("The multiplication is %f \n", p);
printf("The final expression is %f \n", e);
getch();
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.