田中@ISASです。

In message: [ruby-math:00045] Re: (summary) SingleFloat, DoubleFloat < Float
>>> matz / netlab.co.jp (Yukihiro Matsumoto) wrote:
> 次に、私はNumPyのことを全然知らないのですが、どうやら
> float(SingleFloat)を必要とせずに成立しているように聞こえます。
> 私としてはこれが、
> 
>   * NumArrayなどのレベルでは必要でも、取り出してきた値として
>     はfloatとdoubleの区別はそれほど必要ではない。
> 
>   * NumPyの連中がまだ対応していない(不自由を我慢している)だ
>     け。Pythonでは基本型を簡単に組み込めないから。
> 
> のいずれかなのか、あるいはまた別の考えがあるのか判断がつきま
> せん。ここについても知りたいです。

私も NumPyについては仕様を調べただけなので、
実際の使っている人がどう思っているか知りませんが、
私のような SingleFloat を多用したい人にとって
不便だと思うのは以下の点です。

NumPyで SingleFloat の配列を作るとき、
次のいずれかのようにして型を指定してやる必要があります。

  from Numeric import *
  a = array([1, 1.5, 2],'f')
  a = array([1, 1.5, 2]).astype(Float32)

さらに、このあとで次のいずれかの演算をすると、
a は double に化けてしまいます。

  a = a + 0.5
  a = a - a[0]

これは、演算とその結果は、精度の高い方にcastされる、
というごく自然な仕様によるものですが、
Pyithon の浮動小数点数は常に double なので、
こういうおかしな結果になります。
これを SingleFloatで閉じて行ないたければ、
次のようにするのでしょうかね (ちゃんと調べてないけど)。

  a = a + array(0.5,'f')

ただし、ごとけんさんが触れたように、
内部で doubleしか対応していない場合が多いため、
SingleFloat を使うメリットが少なく、
結局 DoubleFloat を使っている人が多いのではないかな、
と勝手に想像しています。

田中昌宏