为什么C打印的值与PHP打印的值不同?

时间:2014-02-15 19:27:33

标签: php c

这是一个完整的菜鸟问题。

所以这是我在C中的代码,

#include<stdio.h>

int main()
{
    int I, X=4;
    double I0;
    double COEFF1[7];
    double COEFF2[9];
    /*Coefficient 1 I0*/
    COEFF1[0]=0.0045813;
    COEFF1[1]=0.0360768;
    COEFF1[2]=0.2659732;
    COEFF1[3]=1.2067492;
    COEFF1[4]=3.0899424;
    COEFF1[5]=3.5156229;
    COEFF1[6]=1.0000000;
    /*Coefficient 2 I0*/
    COEFF2[0]=0.00392377;
    COEFF2[1]=-0.01647633;
    COEFF2[2]=0.02635537;
    COEFF2[3]=-0.02057706;
    COEFF2[4]=0.00916281;
    COEFF2[5]=-0.00157565;
    COEFF2[6]=0.00225319;
    COEFF2[7]=0.01328592;
    COEFF2[8]=0.39894228;

    if(X>=3.75)
    {
        I0=COEFF2[0];
        for(I=1;I<9;I++)
        {
            I0=(3.75/X)*I0+COEFF2[I];
            printf("%i\n", I0);
        }
        //return I0/(sqrt(X)*exp(-X));
    }
    else
    {
        I0=COEFF1[0];
        for(I=1;I<7;I++)
        {
            I0=I0*(X/3.75)*(X/3.75)+COEFF1[I];
        }
        //return I0;
    }

    return 0;
}

只需很少的管家,这是我在PHP中翻译的代码,

<?php
    $coeff1 =array();
    $coeff2 =array();
    /*Coefficient 1 $i0*/
    $coeff1[0]=0.0045813;
    $coeff1[1]=0.0360768;
    $coeff1[2]=0.2659732;
    $coeff1[3]=1.2067492;
    $coeff1[4]=3.0899424;
    $coeff1[5]=3.5156229;
    $coeff1[6]=1.0000000;
    /*Coefficient 2 $i0*/
    $coeff2[0]=0.00392377;
    $coeff2[1]=-0.01647633;
    $coeff2[2]=0.02635537;
    $coeff2[3]=-0.02057706;
    $coeff2[4]=0.00916281;
    $coeff2[5]=-0.00157565;
    $coeff2[6]=0.00225319;
    $coeff2[7]=0.01328592;
    $coeff2[8]=0.39894228;

    $x = 4;

    if($x>=3.75)
    {
        $i0=$coeff2[0];
        for($i=1;$i<9;$i++)
        {
            $i0=(3.75/$x)*$i0+$coeff2[$i];
            printf($i0."<br />");
        }
        //return $i0/(sqrt($x)*exp(-$x));
    }
    else
    {
        $i0=$coeff1[0];
        for($i=1;$i<7;$i++)
        {
            $i0=$i0*($x/3.75)*($x/3.75)+$coeff1[$i];
        }
        //return $i0;
    }
?>

但他们为什么不能产生相同的结果呢? http://imageshack.com/a/img59/3402/98ak.jpg

请帮忙。我被卡住了。

2 个答案:

答案 0 :(得分:4)

%iint的格式说明符; I0的类型为double,但printf被告知将其解释为int。您应该使用%f来代替双打:

printf("%f\n", I0);

答案 1 :(得分:1)

也许这一点也许有用。

两个程序的输出差异确实可归因于

printf("%i\n", I0);

在您的C程序中I0被解释为整数但其位模式存储为double类型,它使用不同的逻辑来组织位(并且在标准变体中也使用不同的位数)。 printf函数的作用是它只需要任何位模式(在整数的长度内)并将其打印出来就像它是一个整数 - 因为你告诉它(%i),因此该计划的输出。

PHP使用动态类型定义,因此您的变量将在使用它们的上下文中进行解释(除非有时通过强制转换或使用settype()强制转换为某种类型)。

I.e。:$a = 1;将是integer,但如果您执行其他任务,例如$a += 0.5;,它将自动投放到float