ごとけんです

In message "[ruby-math:00177] Re: (summary) SingleFloat, DoubleFloat < Float"
    on 00/01/30, Takeshi Horinouchi <horinout / kurasc.kyoto-u.ac.jp> writes:

>>> 例えば、あるときはsingle、あるときはdoubleの
>>> 配列を(変数aで)受けることを想定したプログラムの中で、
>>> a+0.1 を計算したいとします。
>>> 
>>> 精度の高い方をとる仕様のとき、単に a+0.1 と書くと、
>>> single の配列は double になります。
>>> 型変換をしたくなければ、
>>> 精度の低い a+0.1f と書くか、
>>> 配列の型によって0.1を変換する必要があります。
>>> 
>>> 一方、配列の精度を優先する仕様であれば、
>>> これは単に a+0.1 と書けます。

これはまずいです。というのは、0.1 はdouble相当なので、内部で
型変換すると 0.1f と違うモノになります。

>おっしゃるとおりだと思います。ただ、やっぱり引っ掛かっているのは、その
>ために本来は弱い方の型(single)を強い方の型(double)に変換するというルー
>ルの例外を作っていいのだろうかということです。この点はどう思われますか。
>a + 0.1 の a がsingleの配列だったら結果もシングル、singleのスカラーだっ
>たら結果は double というのもちょっと、と思います。一方、a+0.1f なりの 
>f を書き忘れただけで(とてもやりそう)、結果がダブルになるのもちょっと、
>ですね。

それも分かるんですが、僕はリテラルで解消すべきと考えます。
0.1 と 0.1f の違いにコダワラナイ場合は、忘れないように、

	a + 0.1.prec(SingleFloat)

とするのが良いでしょう。prec は Precision モジュールで定義さ
れているメソッドで、SingleFloat.induced_from(0.1) を呼び出し
ます。

# 今日から明後日まで忙しいのであまり反応できないです

-- gotoken