Feature #10255
openMath.log: check domain of base argument
Description
I suppose Math.log with base 0 or 1 is undefinable or has no meaning, so I think it should be raise Math::DomainError
It is helpful to prevent unnecessary concern or misunderstand.
Yes I know there are many controversial issue about that, specially treating Math.log(0.0, 0.0), Math.log(1.0, 0.0) and Math.log(1.0, 1.0).
Even if there are some reason it had better return value,
I suppose Math.log(2.0,1.0)
should not be Infinity
and Math.log(1.0, 0.0)
should not be -0.0
.
In terms of raises Math::DomainError instead of returning NaN if the base is less than 0
at the (https://bugs.ruby-lang.org/issues/9797)
, this PATCH make sense.
But please feel free to point out my unsatisfactory points. (Actually this is first time to write c-lang thoroughly)
Thank you. gogo.
Before
# For all 0 <= n < 1
Math.log(n, 1.0)
=> -Infinity
Math.log(1.0, 1.0)
=> NaN
# For all n > 1
Math.log(n, 1.0)
=> Infinity
Math.log(0.0,0.0)
=> NaN
# For all 0 < n < 1
Math.log(n, 0.0)
=> 0.0
# For all n >= 1
Math.log(n, 0.0)
=> - 0.0
After
# For all n >= 0. Actually for all n <- R (a real number) because of checking domain of first argument
Math.log(n, 1.0)
Math::DomainError: Numerical argument is out of domain - “log”
Math.log(n, 0.0)
Math::DomainError: Numerical argument is out of domain - “log”
Files