Variadic function (va_arg) doesn’t work with float?

Parameters of functions that correspond to … are promoted before passing to your variadic function. char and short are promoted to int, float is promoted to double, etc. 6.5.2.2.7 The ellipsis notation in a function prototype declarator causes argument type conversion to stop after the last declared parameter. The default argument promotions are performed on … Read more

Uses for negative zero floating point value?

From Wikipedia: It is claimed that the inclusion of signed zero in IEEE 754 makes it much easier to achieve numerical accuracy in some critical problems[1], in particular when computing with complex elementary functions[2]. The first reference is “Branch Cuts for Complex Elementary Functions or Much Ado About Nothing’s Sign Bit” by W. Kahan, that … Read more

Is it safe to assume floating point is represented using IEEE754 floats in C?

Essentially all architectures in current non-punch-card use, including embedded architectures and exotic signal processing architectures, offer one of two floating point systems: IEEE-754. IEEE-754 except for blah. That is, they mostly implement 754, but cheap out on some of the more expensive and/or fiddly bits. The most common cheap-outs: Flushing denormals to zero. This invalidates … Read more

“Expression is not assignable” — Problem assigning float as sum of two other floats in Xcode?

The other answers don’t exactly explain what’s going on here, so this is the basic problem: When you write blackKey.center.x, the blackKey.center and center.x both look like struct member accesses, but they’re actually completely different things. blackKey.center is a property access, which desugars to something like [blackKey center], which in turn desugars to something like … Read more