用C语言实现inf输出的简单精度测试

用C语言实现inf输出的简单精度测试,c,sum,precision,C,Sum,Precision,试图测试精度,使总和从1到100万,但我的输出结果一直是inf #include <stdio.h> int main() { float x=0.0 ; double y =0.0; int i; for(i=1; i<100000; i = i+1) { x=(float) x+( 1.0f/(3.0f*(float)(i*i))); y=(double) y+ ( 1.0/(3.0*(double)(i*i))); } printf("Natural O

试图测试精度,使总和从1到100万,但我的输出结果一直是inf

    #include <stdio.h>



int main()
{
float x=0.0 ;
double y =0.0;
int  i;
for(i=1; i<100000; i = i+1)
{
x=(float)  x+( 1.0f/(3.0f*(float)(i*i)));
y=(double) y+ ( 1.0/(3.0*(double)(i*i)));
}
printf("Natural Order \n");
printf("Single Precision: ");
printf("%f", x);
printf("\n");
printf("Double Precision: ");
printf("%lf", y);
printf("\n");
}
#包括
int main()
{
浮动x=0.0;
双y=0.0;
int i;

对于(i=1;i
i^2
不是i平方,而是二进制操作(xor)。请使用例如
i*i
。还有用于更高幂次的
pow
函数。

您想要的可能是:

int main()
{
    float x=0.0 ;
    double y =0.0;
    int  i;

    for(i=1; i<10; i = i+1)
    {
       x= x+( 1.0f / ( 3.0f * (float)(i)*(float)(i)   ));
       y= y+(  1.0 / ( 3.0  * (double)(i)*(double)(i) ));
    }

    printf("Single Precision: ");
    printf("%f", x);
    printf("\n");
    printf("Double Precision: ");
    printf("%f", y);
    printf("\n");

    return 0;
}
intmain()
{
浮动x=0.0;
双y=0.0;
int i;

对于(i=1;i表达式
i^2
表示
i按位异或2
,而不是重复乘法

i^2
的某些值为零-当
i=2
时-这意味着您有时会被零除

(i^2)
替换为
(i*i)


实际上,根据
float
将在需要时自动升级为
double
,但这取决于编译器是一个坏习惯。另外,其他读者不会清楚代码。

你想用i^2做什么?如果你想平方i,那么使用i*iI已经修复了这一点,但当我打印出x和y时,我仍然会得到“inf”在你的代码中,我仍然看到一个
^
符号,这是打字错误吗?是的。我很抱歉。谢谢你。我在发布我的编辑后立即意识到。如果
I^2
I
的平方,请使用
I*I
代替…
^
是位异或。有一个
(浮点)
(双精度)
1/3
前面,所以它不是整数除法。@mch好的,谢谢。运算符优先级在c/c++中有点复杂。即使x原来是一个浮点数?如果你说的是printf升级:是的。我正在用你的更正测试我的代码,在我将i范围设置为1000之后(例如。i@KassandraSandoval是的。因为
i*i
对于
int
变量来说太多了。我更改了发布的代码。这样,您可能会得到具有更大
i
值的结果。对于某些值不是这样的:仅对于i=2@LPs-您将表达式的属性与调用这些属性所需的条件混淆。表达式Session“i^2的某些值为零”是绝对正确的-满足该表达式的条件是
i=2
。由于我已经说明了属性及其条件,您的批评是毫无意义的。我在编辑之前写过。您写道:i^2的某些值为零(i的奇数值)现在答案是确定的。
%lf
仅用于
scanf
Printf
始终升级
%f
将变量传递到
double
,而不关心
l
格式的一部分。我说的是其他读者不会清楚代码。我什么时候说过
Printf
不会升级到
doublee> ?如果我说代码不清晰,我错在哪里?
float
总是升级为
double
,而不是在需要时。
printf("Double Precision: ");
printf("%lf", y);               //double has %lf format specifier.