这是一个完整的菜鸟问题。
所以这是我在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
请帮忙。我被卡住了。
答案 0 :(得分:4)
%i
是int
的格式说明符; 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
。