Hello Martin,

2016-08-18 15:31 GMT+02:00 Martin Storsjö <[email protected]>:
> ---
> The (l)rint(f) functions call an inline assembly snippet to
> do the rounding - that does seem to round in the right way, but I'm
> not sure if that relies on the fpscr being set in the right mode?
> ---
>  mingw-w64-crt/math/llrint.c  | 2 +-
>  mingw-w64-crt/math/llrintf.c | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/mingw-w64-crt/math/llrint.c b/mingw-w64-crt/math/llrint.c
> index 1fc11e8..d52fd15 100644
> --- a/mingw-w64-crt/math/llrint.c
> +++ b/mingw-w64-crt/math/llrint.c
> @@ -11,7 +11,7 @@ long long llrint (double x)
>  #if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || 
> defined(__i386__)
>    __asm__ __volatile__ ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");
>  #else
> -  retval = (long long)x;
> +  retval = x >= 0 ? (long long)floor(x + 0.5) : (long long)ceil(x - 0.5);
>  #endif
>    return retval;
>  }
> diff --git a/mingw-w64-crt/math/llrintf.c b/mingw-w64-crt/math/llrintf.c
> index aabd81f..cb2b668 100644
> --- a/mingw-w64-crt/math/llrintf.c
> +++ b/mingw-w64-crt/math/llrintf.c
> @@ -11,7 +11,7 @@ long long llrintf (float x)
>  #if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || 
> defined(__i386__)
>    __asm__ __volatile__ ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");
>  #else
> -  retval = (long long)x;
> +  retval = x >= 0 ? (long long)floorf(x + 0.5) : (long long)ceilf(x - 0.5);
>  #endif
>    return retval;
>  }
> --
> 2.7.4

There is no other way to have here rounding, right? If so patch is ok.

Kai

------------------------------------------------------------------------------
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to