
Hi - thank you for this. I was unaware of the “constant folding” in GCC (and I’m surprised it works for functions like asinh), but I can see that it explains the difference in behaviour. So I think this is a (possibly minor) bug that Haskell inherits from mingw-w64. I guess I should raise a GHC issue – though I’m not sure whether it would be best to try to fix within Haskell or within mingw-w64. Also, I think the FloatFnInverses.hshttps://gitlab.haskell.org/ghc/ghc/-/blob/master/testsuite/tests/numeric/sho... test doesn’t should be showing as a fail somewhere in the CI testing. (It doesn’t give the expected output when I run it on Windows). Do you know whether/where I can see that? (I don’t know what CI happens or how to view its output). Thanks again, David. From: arata, mizukimailto:minorinoki@gmail.com Sent: 03 September 2021 13:43 To: David Jamesmailto:dj112358@outlook.com Cc: haskell-cafe@haskell.orgmailto:haskell-cafe@haskell.org Subject: Re: [Haskell-cafe] Trouble with asinh (c calls with Doubles) in Windows Hi David, If I understand correctly, GHC uses mingw-w64’s libc implementation on Windows. Since mingw-w64’s math functions are not of very good quality, it is likely that asinh returns NaN for a very large input. As to why `asinh(1.7976931348623157e308)` in CAsinh.c produces (seemingly-correct) 710.4758, it is probably because the C compiler (GCC) uses a different implementation of asinh when doing constant folding. As a note, you may get a different (compile-time computed) result for `asinh(x)` if you set a more aggressive optimization flag. Mizuki