```Issue #10255 has been updated by gogo tanaka.

After I thought twice about that,

I came to the conclusion that `1.0` should be considered as  `1 + ε (infinitesimal)`

In terms of ↓

```
1/0.0
=> Infinity
```

so below behave does make sense.↓

```
# For all 0 <= n < 1
Math.log(n, 1.0)
=> -Infinity

# For all n > 1
Math.log(n, 1.0)
=> Infinity
```

But when a base is exact `1`, it doesn't make sense still.↓

```
# For all 0 <= n < 1
Math.log(n, 1)
=> -Infinity

# For all n > 1
Math.log(n, 1)
=> Infinity
```

We can say some for `0.0` or exact `0`

thank you. gogo.

----------------------------------------
Feature #10255: Math.log: check domain of base argument
https://bugs.ruby-lang.org/issues/10255#change-49074

* Author: gogo tanaka
* Status: Open
* Priority: Normal
* Assignee:
* Category: math
* Target version:
----------------------------------------
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--------------------------------
test_math.rb_ Add tests for Math.log.PATCH (1.06 KB)
NEWS_ Update for Math.log.PATCH (564 Bytes)
math.c_ Math.log with base 0 or 1 should raise DomainError.PATCH (502 Bytes)
update_rdoc_for_Math.log.PATCH (721 Bytes)

--
https://bugs.ruby-lang.org/
```