2015-03-13 147 views
0

使用DevC++ 获得0.00000 以及cout获取一些奇怪的输出。为cout和printf获取不同的输出,同时打印相同的变量

#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; 
} 
+2

这并不奇怪,[它在科学记数法(HTTP:// coliru .stacked-crooked.com/a/07639be715a618c9) – Borgleader 2015-03-13 14:35:18

+1

应该是'int main()'。 – 2015-03-13 14:36:08

+4

这是什么“奇怪的输出”? – Kvothe 2015-03-13 14:38:16

回答

2

它看起来对我来说,M_PI不正是圆周率(我们知道它不可能是),并从sin结果是不完全为零。

printf%f表示使用科学记数法来表示少数四舍五入为“正常”的小数而cout使用自适应格式(在printf的大致%g我记得)输出的数字。

还要注意的是%f意味着double而是可变参数有益促进你的float为双在传递的时候。

2

如前所述你会得到不同的输出值,因为cout一个用科学记数法和printf默认为6小数位。如果使用增加值

printf("%.013f \n",i); 

您将获得相同的值。

现在并非所有的十进制数都可以用浮点表示来表示,这就是为什么你没有得到你期待的结果。

而且here's如何罪可能不同的平台上实现一个问题,你就可以明白为什么PI的正弦值可能不是0

相关问题