Math.log: check domain of base argument
I suppose Math.log with base 0 or 1 is undefinable or has no meaning, so I think it should be raise
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,
Math.log(2.0,1.0) should not be
Math.log(1.0, 0.0) should not be
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.
# 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
# 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”