
On Wed, May 19, 2021 at 11:50:22AM -0300, Fabrício Olivetti de França wrote:
Investigating the source of this problem, I found that it uses the default implementation of (**) from base defined as x ** y = exp (log x * y).
The type of (**) is: Floating a => a -> a -> a with the base and exponent having the same type. The only practical way to define pow(x, y) for a floating point y, is via the exp() and log() functions.
So I was wondering, is there any reason to have this (potentially dangerous) default implementation on base?
The behaviour for negative inputs seems to be correct:
λ> log(-2)
NaN
λ> exp(log(-2))
NaN
λ> exp(log(-2) * (-2))
NaN
λ> log(0)
-Infinity
were you expecting these to check for non-positive inputs and to throw a
floating point exception? When I compile and run:
#include