From: Kazuhisa YANAGAWA Date: 1998-03-11T11:01:58+09:00 Subject: [ruby-dev:1664] Re: [ruby-list:7066] Re: infinity In message <199803101129.UAA10316.keiju@cupmail0.rational.com> keiju@rational.com (Keiju ISHITSUKA) writes: > >> とすれば今のままで, 表現をちゃんとした対応を行なった方が良さそうですね. > >> # Math.exp(inf)以外はちゃんとした結果になっているところがこわい... > > と思いましたが, ちゃんとしていませんでした. (略) > どうなっているんだ... まあ数学的にいったら無限大同士や数値と非数値との比較なんてのはできる べきではないのでいいんじゃないでしょうか (^^? # 二つの無限大が同値であるか否かなんていうのは不毛. 数値 != NaN はで # きなきゃいけないけど. > >> そうですね. RealがあるならRealが良いですが, きっとRealは採用されること > >> はないでしょう(^^;;; > > いまから突っ込むのはちょっと辛いでしょうね.... > > 辛くないと思いますが, 今のところ, カテゴリ分けのためのクラスになって機 > 能的にはほとんど意味のないクラスになりますので... 無理に意味をつけてみるとか (^^; もっともほとんどのものは Numeric で 定義されていますしね. > > いや, 整数でオーバフローした時と扱いは同じではないかと思いますが. オー > > バフローを検出して値を無限大/無限小にするというのはありでしょうが. > > rubyの整数はオーバフローすることはないと思います. いやまあそうなんですが, ここでいう「整数で」っていうのはハードウェア レベルの話だったりします. たとえば R3000 なんかだと, 正整数の演算で 0xffffffff に 0x00000001 を足すと(エラーも出さずに)0x00000000 にな る, と. IEEE の規格が数値表現だけでなくて演算結果まで規定しているの なら別ですが, そうでなかったら結果がどうなるかはわからない. > >|rbc0> _**2 > >|1.0e+168 > >|rbc0> _**2 > >|Inf.0 > > このように, Floatの扱える範囲を越えた時をオーバフローと言っているのか > と思ったのですが? そうすると, その時の結果がInfになっているのかな? > と. はい範囲を超えた場合をオーバフローといっています. ただし結果が Inf になるかどうかはわたしは知らない, と. # 実はちゃんと規定されているような気もする.... > > # とはいえそれも Float--Integer 間の適当な型変換で実用的に問題なく処 > > # 理できそうだ, と. > > まあ, そうなんですが, そういう使い方を考えるとFloat::Infは気分が... Complex のことは気にしないことにして, Numeric に入れてしまうという手 はありますが, それはそれで気持ち悪い.... 以下は余談. > 浮動小数点数としては, 常に同じサイズなんですね? それで, 数値が大きくな > るにしたがって, 指数部のサイズを大きくする... > > 精度が一定でないのが実用的でないような気もしますが... そうでもないのか > な... 数値計算ではどうせ誤差がたまってくるのだから, たいして問題にはならな い, という主張のようでした. まあ数値計算の本を書いているぐらいだから, きっとちゃんと考えているんだと思います. > > 「充分に効率的な演算ができる, 大きな数も扱える, 0 付近での精度は > > IEEE のものより良い, 数の表現に数以外の変なものは入っていない (^^)」 > > というのが宣伝文句. > > 0/0とかはどうなるんでしょうね? やはりNaNのような... 「でもそれは数ではない」と. 例外を出しておしまい. =========================================================================== 柳川 @ 情報システム学研究科 . 電気通信大学 katze@yuba.is.uec.ac.jp March 11, 1998 Slow and steady wins the race.