Andrew Eikum wrote:
+static LONG f_to_24(float value) +{ if(value <= -1.f) + return 0x80000000; + if(value >= 1.f * 0x7FFFFF / 0x800000) + return 0x7FFFFF00; + return lrintf(value * 0x80000000U); } ... +static inline LONG f_to_32(float value) +{ + if(value <= -1.f) + return 0x80000000; + if(value >= 1.f * 0x7FFFFFFF / 0x80000000U) /* this rounds to 1.f */ + return 0x7FFFFFFF; + return le32(lrintf(value * 0x80000000U)); +}
[sorry for a possible duplicate, the previous mail contained a typo] Minor nitpick: I'd say these functions are identical on little-endian systems if the least significant bits are discarded. Are you sure that we indeed want two functions here, and not, say, use f_to_32() in put24()? -- Alexander E. Patrakov