打印相同变量时为 cout 和 printf 获取不同的输出
Getting different output for cout and printf while printing same variable
使用 Devc++
对于 printf 得到 0.00000
并让 cout 得到一些奇怪的输出。
#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
main()
{
float i,j=M_PI;
i=sin(j);
printf("%f \n",i);
cout<<i;
}
在我看来 M_PI
不完全是 pi(我们知道它不可能),sin
的结果不完全为零。
printf
和 %f
表示输出数字四舍五入为 "normal" 小数,而 cout
使用自适应格式(我记得在 printf 中大约是 %g
) 使用科学记数法表示小数。
另请注意,%f
表示 double
,但可变参数在传入时有助于将您的 float
提升为双精度。
如前所述,您会得到不同的输出值,因为 cout
使用科学记数法而 printf
默认为小数点后 6 位。如果使用
增加它
printf("%.013f \n",i);
您将获得相同的值。
现在并不是所有的十进制数都可以用浮点数表示,这就是为什么您得不到预期结果的原因。
另外here's一个关于sin如何在不同平台上实现的问题,你可以看到为什么PI的正弦可能不是0。
使用 Devc++ 对于 printf 得到 0.00000 并让 cout 得到一些奇怪的输出。
#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
main()
{
float i,j=M_PI;
i=sin(j);
printf("%f \n",i);
cout<<i;
}
在我看来 M_PI
不完全是 pi(我们知道它不可能),sin
的结果不完全为零。
printf
和 %f
表示输出数字四舍五入为 "normal" 小数,而 cout
使用自适应格式(我记得在 printf 中大约是 %g
) 使用科学记数法表示小数。
另请注意,%f
表示 double
,但可变参数在传入时有助于将您的 float
提升为双精度。
如前所述,您会得到不同的输出值,因为 cout
使用科学记数法而 printf
默认为小数点后 6 位。如果使用
printf("%.013f \n",i);
您将获得相同的值。
现在并不是所有的十进制数都可以用浮点数表示,这就是为什么您得不到预期结果的原因。
另外here's一个关于sin如何在不同平台上实现的问题,你可以看到为什么PI的正弦可能不是0。