ふと思ったけど、絶対値って二乗して平方根とればわかるのかな。
> Math.sqrt(10 ** 2) => 10 > Math.sqrt(-3 ** 2) > Math::DomainError: Numerical argument is out of domain - "sqrt" from (irb):9:in `sqrt' from (irb):9 from /home/kimoto/.rbenv/versions/1.9.3-p327/bin/irb:12:in `<main>' # あれえええええ # Rubyって**のほうがマイナス符号よりも結合優先度高いんだな # これってマイナスの値がsqrtに入力されてるのが例外になってしまってるんだろうなぁ。 # というわけで-1でテストしてみる > Math.sqrt(-1) Math::DomainError: Numerical argument is out of domain - "sqrt" from (irb):10:in `sqrt' from (irb):10 from /home/kimoto/.rbenv/versions/1.9.3-p327/bin/irb:12:in `<main>' # はい、再現しました。 # 気を取り直してやり直し > Math.sqrt((-3) ** 2) => 3.0 > Math.sqrt((7) ** 2) => 7.0 > Math.sqrt((0.235) ** 2) => 0.235 # 無限小数な有理数ではどうか > Math.sqrt( (- Rational(1, 3)) ** 2 ) => 0.3333333333333333
大丈夫そうだなぁ。