issue 7006 - std.math.pow (integral, integral) crashes on negative exponents

Timon Gehr timon.gehr at gmx.ch
Wed Dec 18 04:23:14 UTC 2019


On 18.12.19 01:37, Timon Gehr wrote:
> 
>> According to the standard x^y  is defined as:
>>
>> exp(y * log(x))
>> ...
> 
> Well, that's pretty lazy. Also, it can't be true simultaneously with 
> your claim that pow(0.0,0.0) can be modified to return _anything_, as it 
> would then need to be consistent with exp(0.0*log(0.0)).

I guess what's going on is that exp and log in your expression as it 
occurs in the standard are the actual mathematical functions and `pow` 
is defined to approximate this exact result for arguments where it is 
defined, while for other arguments there is an explicit definition.

Another thing I noticed is that 
https://en.cppreference.com/w/cpp/numeric/math/pow says:
"except where specified above, if any argument is NaN, NaN is returned"

As pow(NaN,0.0) is not "specified above", this seems to say that 
pow(0.0/0.0,0.0) should be NaN. However, g++ gives me 1.

I'm not sure what's going on here. I guess either the documentation is 
wrong or g++ violates the C++ standard in order to satisfy 
recommendations in IEEE 754-2008.


More information about the Digitalmars-d mailing list