16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE^2:浮動小数点の誤差の話"
この発言は #00082 龍平 さんのRE:浮動小数点の誤差の話 に対するコメントです
この発言に対し以下のコメントが寄せられています
#00087 龍平 さん RE^3:整数と実数
龍平 さん、みなさん、おはようございます。
Diaです。
#82 龍平さん said
|
|一般論なんですが、リアル値の=を期待するのは危険ではないでしょうか。
そうなんですけど。
今回の関数だと、これでちゃんとした結果を返すんです。
| result := ((getDistance(A,B,C)*getDistance(A,B,D)) >= 0);//*1*
このイコールが成り立つのは、getDistance関数が (きっちり)0を返したときで。
それというのは、
| result := (ABY*P.x-ABX*P.y+ABX*A.y-ABY*A.x)
| /sqrt(sqr(ABX)+sqr(ABY));
こいつの値だから、0になるときは、きっちり0になるんですよ。
なぜかというと、分子の値が全部integerだから(゚゚;)\(--;ワカルカ!
(0以外の値は、realな値で割るのでrealになるが、0を割ったときは、
ちゃんとした0.0・・・0 になる。はず。)
。。。。でも、こういうことするのって、悪しき自己満足ですね。
あんま読む人のことを考えていない、悪いコードと思います。
実は、あんま考えないでイコールで比較して、テストがうまくとおってたんで、
何の気なしにアップしてました。
わざわざご指摘ありがとうございます。
97/10/24(Fri) 01:08am
CQK00014 Dia
Original document by Dia 氏 ID:(CQK00014)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|