On 11 December 2013 19:16, Tom Musta <tommu...@gmail.com> wrote: > The float64_to_uint32_round_to_zero routine is incorrect. > > For example, the following test pattern: > > 425F81378DC0CD1F / 0x1.f81378dc0cd1fp+38 > > will erroneously set the inexact flag. > > This patch re-implements the routine to temporarily force the > rounding mode and use the float64_to_uint32 routine.
> uint32 float64_to_uint32_round_to_zero( float64 a STATUS_PARAM ) > { > - int64_t v; > + uint64_t v; > uint32 res; > > - v = float64_to_int64_round_to_zero(a STATUS_VAR); > - if (v < 0) { > - res = 0; > - float_raise( float_flag_invalid STATUS_VAR); > - } else if (v > 0xffffffff) { > + v = float64_to_uint64_round_to_zero(a STATUS_VAR); > + if (v > 0xffffffff) { > res = 0xffffffff; > + STATUS(float_exception_flags) &= ~float_flag_inexact; > float_raise( float_flag_invalid STATUS_VAR); > } else { > res = v; The patch doesn't seem to be doing what the commit message says it does? thanks -- PMM