[#43085] 1.9SVN HEADで拡張ライブラリがインストールされない? — okkez <okkez000@...>
okkezといいます。
9 messages
2007/01/02
[#43086] Re: 1.9SVN HEADで拡張ライブラリがインストールされない?
— Yukihiro Matsumoto <matz@...>
2007/01/02
まつもと ゆきひろです
[#43103] 浮動小数点を比較するには — wada toshiki <wada-ts@...>
お世話になります。
21 messages
2007/01/11
[#43105] Re: 浮動小数点を比較するには
— NISHIMATSU Takeshi <t_nissie@...>
2007/01/11
> Rubyレシピブック(P290)で 比較する数値の差を Float::EPSILON と比較する方法があり
[#43112] Re: 浮動小数点を比較するには
— wada toshiki <wada-ts@...>
2007/01/13
NISHIMATSU Takeshiさん wrote:
[#43114] Re: 浮動小数点を比較するには
— KURODA Hiraku <hiraku@...>
2007/01/13
初めまして、黒田と申します。
[#43134] enctype="multipart/form-data"指定したデータについて — "Nobuyuki Inaba" <nobuyuki.inaba@...>
いなばと申します。
5 messages
2007/01/23
[ruby-list:43114] Re: 浮動小数点を比較するには
From:
KURODA Hiraku <hiraku@...>
Date:
2007-01-13 05:05:34 UTC
List:
ruby-list #43114
初めまして、黒田と申します。
wada toshiki wrote:
> class Float
> def near_to(b)
> (self - b).abs * abs < Float::EPSILON
> end
> end
これに追加して
====
printf("0.1 = %.20e\n", 0.1)
x = 0.0; 20.times{ x+= 0.1; printf("x = %.20e\n", x) }
printf("2.0 = %.20e\n", 2.0)
p (2.0-x).abs
p (2.0-x).abs * 2.0.abs
p Float::EPSILON
p (2.0).near_to(x)
====
こんな処理を試したら、次のような結果になりました。
====
0.1 = 1.00000000000000005551e-01
x = 1.00000000000000005551e-01
x = 2.00000000000000011102e-01
(中略)
x = 1.90000000000000057732e+00
x = 2.00000000000000044409e+00
2.0 = 2.00000000000000000000e+00
4.44089209850063e-16
8.88178419700125e-16
2.22044604925031e-16
false
====
実数の0.1とFloatの0.1(実際は0.100...0551)の差が予想よりも大きくて、20回
積み重ねてEPSILONを飛び出したといった感じでしょうか?
Rubyは
ruby 1.8.2 (2005-04-11) [i386-linux]
です。
ところで
>
> (self - b).abs * abs は、(self - b).abs / abs の誤りだと思うのですが、
この処理って、
(self-b).abs
では駄目なんでしょうか?更にabs倍したり割ったりする意味が良く分かりません
でした。もしかして、レシピブックの方に何か根拠が載ってたりします?
--
--------------------------------------------------
黒田 拓(くろだ ひらく)
hiraku@sapporo.email.ne.jp
http://www.hinet.mydns.jp/~hiraku/
--------------------------------------------------