[gccsdk] [Bug 250] New: GCC 4.7.4 Rel 1 Dev 2014-01-08: sqrt function
bob.brand at tiscali.nl
Sat Mar 22 13:16:41 PDT 2014
In message <bug-250-73 at http.www.riscos.info/bugzilla3/> you wrote:
Looks like you have fallen in a classic C pitfall:
passing a double argument to a vararg/stdarg function
but interpreting it as float.
printf("%f\n", (float) sqrt(2.0));
Reason: float is a four byte type, double is 8 bytes.
And even if it you'd use sqrtf() or fsqrt() (these
non-standard functions are not present in the RISC OS
version of the library as far as I know), standard C
would still promote the float argument to a double
before passing control to printf().
That in turn is presented with 8 bytes but the float
format only pulls 4, and interprets that as float. So
any output would be possible.
(You may want to have a look at Andrew Koenig's book
`C Traps and Pitfalls'. It was already an ancient book
when I was a student, but the traps and pitfalls haven't
More information about the gcc