0

Using Devc++ for printf getting 0.00000 and for cout getting some weird output.

#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;
}
Elhaw
  • 325
  • 3
  • 18
Alok
  • 93
  • 3

2 Answers2

2

It looks to me like M_PI isn't exactly pi (we know it can't be), and the result from sin isn't exactly zero.

printf with %f represents output numbers rounded as a "normal" decimal while cout uses an adaptive format (roughly %g in printf as I recall) that uses scientific notation to represent the small number.

Also note that %f means double but that the varargs helpfully promotes your float to a double when being passed in.

Mark B
  • 95,107
  • 10
  • 109
  • 188
2

As mentioned you get different output values because the cout one uses scientific notation and the printf defaults to 6 decimal places. If you increase it by using

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

You'll get the same value.

Now not all decimal numbers can be represented with floating point representation which is why you don't get the result you are expecting.

Also here's a question on how sin might be implemented on different platform, you can then see why sine of PI might not be 0.

Community
  • 1
  • 1
Eric Fortin
  • 7,533
  • 2
  • 25
  • 33