@@ -104,16 +104,35 @@ p 0.0 ** 0 # => 1.0
104104
105105### def <=>(other) -> -1 | 0 | 1 | nil
106106
107- ` self ` と ` other ` を比較して 、` self ` が大きい時に正 、
108- 等しい時に ` 0 ` 、小さい時に負の整数を返します 。
107+ ` self ` を ` other ` と比較し 、` self ` のほうが大きい場合に ` 1 ` 、
108+ 等しい場合に ` 0 ` 、小さい場合に ` -1 ` を返します 。
109109比較できない場合は ` nil ` を返します
110110
111- ``` ruby title="例"
112- p 3.05 <=> 3.14 # => -1
113- p 1.732 <=> 1.414 # => 1
111+ 返り値を覚えるには、` <=> ` を ` - ` に置き換えてみるとよいでしょう。` x <=> y ` と ` x - y ` は符号が一致します。
112+
113+ ``` ruby title="比較できる例"
114+ p 3.05 <=> 3.14 # => -1
115+ p 1.732 <=> 1.414 # => 1
114116p 3.3 - 3.3 <=> 0.0 # => 0
115- p 3.14 <=> " hoge" # => nil
117+
118+ # 正負の無限大も比較できる
119+ p 3.14 <=> Float ::INFINITY # => -1
120+ p 3.14 <=> - Float ::INFINITY # => 1
121+ p Float ::INFINITY <=> - Float ::INFINITY # => 1
122+
123+ # Complex オブジェクトでも虚部がゼロなら比較できる
124+ p 3.14 <=> 3.1 + 0i # => 1
125+ ```
126+
127+ ``` ruby title="比較できない例"
128+ # NaN とは比較できない
116129p 3.14 <=> 0.0 / 0.0 # => nil
130+
131+ # 虚部がゼロでない複素数とは比較できない
132+ p 3.14 <=> 1i # => nil
133+
134+ # 数値でないものは Float と比較できない
135+ p 3.14 <=> " 3.1" # => nil
117136```
118137
119138### def ==(other) -> bool
@@ -486,8 +505,7 @@ p 0.1.negative? # => false
486505
487506` self ` を人間が読みやすい形の文字列表現にして返します。
488507
489- 固定小数点、浮動小数点の形式か、 ` "Infinity" ` 、` "-Infinity" ` 、` "NaN" ` のいず
490- れかを返します。
508+ 10進固定小数点、10進浮動小数点の形式か、` "Infinity" ` 、` "-Infinity" ` 、` "NaN" ` のいずれかを返します。
491509
492510- ** return** -- 文字列を返します。
493511
@@ -500,6 +518,10 @@ p (1.0/0.0).to_s # => "Infinity"
500518p (0.0 / 0.0 ).to_s # => "NaN"
501519```
502520
521+ ` 0.1.to_s ` が文字列 ` "0.1" ` を返すのは自明ではありません。
522+ 数値リテラル ` 0.1 ` によって生成される Float オブジェクトは、数学的には 0.1 からわずかにずれた値であり、厳密な小数表示は循環小数になります。
523+ それに対し、` Float#to_s ` は Float が持つ精度に見合った穏当な文字列表現を返します。
524+
503525### def arg -> 0 | Float
504526### def angle -> 0 | Float
505527### def phase -> 0 | Float
@@ -541,10 +563,24 @@ p 0.5.numerator # => 1
541563
542564### def to_r -> Rational
543565
544- ` self ` を [ c: Rational ] に変換します。
566+ ` self ` を [ c: Rational ] オブジェクトに変換したものを返します。
567+
568+ 浮動小数点数は、` Float::INFINITY ` , ` -Float::INFINITY ` , ` Float::NAN ` を除けば数学的には有理数を表しています。その値を得るメソッドです。
569+
570+ - ** raise** ` FloatDomainError ` -- ` self ` が ` Float::INFINITY ` , ` -Float::INFINITY ` , ` Float::NAN ` の場合に発生します。
545571
546572``` ruby title="例"
547- p 0.5 .to_r # => (1/2)
573+ p 0.0 .to_r # => (0/1)
574+ p 0.75 .to_r # => (3/4)
575+ ```
576+
577+ ``` ruby title="リテラルで得られるFloatの厳密値を知る例"
578+ p 0.1 .to_r # => (3602879701896397/36028797018963968)
579+ p 0. 1r # => (1/10)
580+ # 浮動小数点数リテラル `0.1` によって生成される Float オブジェクトは
581+ # 数学的には 0.1 とはわずかに異なる数を表しており、
582+ # 有理数リテラル `0.1r` で生成される Rational オブジェクトとは
583+ # 値が一致しない
548584```
549585
550586- ** SEE** [ m: Float #rationalize]
0 commit comments