Nanakos Chrysostomos wrote:
> I have the above C code snippet. I am trying to get a resonable
> result in a fixed form with printf for a long double value but with
> no luck. What am I doing wrong?
> long double c = powl(10.0L,30.0L);
>
> printf("%llf %lle\n",c,c);
> # gcc -DDOUBLE -msse2 -mfpmath=sse -m64 -m128bit-long-double long.c -lm
> #./a.out
>
> 1000000000000000000024696061952.000000 1.000000e+30
>
> The second result is right but how can I get a fixed right result for the first one?
> The fixed precision should be a lot bigger than this according to the IEEE-754 standard.
> I am using a 64-bit machine with Debian Squeeze x86-64 version.
On x86, long double is 80 bits, which is roughly 24 decimal digits.
The -m128bit-long-double flag only changes the alignment, not the
accuracy of the calculations.
The only reason why you're getting different results for %f and %e is
that the default precision of 6 refers to 6 decimal places for %f but
to 6 significant digits for %e.
--
Glynn Clements <glynn@xxxxxxxxxxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Assembler]
[Git]
[Kernel List]
[Fedora Development]
[Fedora Announce]
[Autoconf]
[Yosemite Campsites]
[Yosemite News]
[GCC Help]