2016-06-29 7 views
1

Когда я использую оператор ** с отрицательным BigDecimal и десятичным BigDecimal, который не работает с ошибкой Zero or negative argument.Некоторые BigDecimal не вычисляются с помощью оператора **

Я проверил некоторые аналогичные ценности, как это:

-2 ** '0.3'.to_d 
# => -1.23114441 
2 ** '0.3'.to_d 
# => 1.23114441 
2 ** '0.3'.to_d 
# => 1.23114441 
-2 ** '0.3'.to_d 
# => -1.23114441 
2.to_d ** '0.3'.to_d 
# => 1.23114441 
-2.to_d ** '0.3'.to_d 
# => Math::DomainError: Zero or negative argument for log 
from (pry):111:in `**' 
2.to_d ** 3.to_d 
# => 8.0 
-2.to_d ** 3.to_d 
# => -8.0 

Почему эта ошибка происходит и как я могу это исправить?

ответ

4

Теперь я понимаю, что я неправильно понял.

Я думал, что -2.0 ** 0.3 такой же, как (-2.0) ** 0.3, но он такой же, как -(2.0 ** 0.3).

Я не знал, что ** сильнее, чем -.

+0

Whoa, это * действительно * удивительно. –