[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:78157] Re: optimization and accuracy with gcc


<200101022006.PAA27129 _at_ subaru.gsfc.nasa.gov>の記事において
ebisawa _at_ subaru.gsfc.nasa.govさんは書きました。

> このように最適化によって計算精度が変わってくるのは、
> そういうもんなんでしょうかねえ。

 そういうものだ、と思います。

> 問題となっているのは、
> このベクトルの長さをacosにいれていて、引数が1.0より
> 大きいときに落ちる、ということです。上の例では最適化を
> はずすしたら正しく動作していますが(ベクトルの長さが1)、
> そうならない場合もあります。最適化をはずすだけでは
> 問題は解決しない、と。
>
> こういう場合に賢い対処の方法というのは、どうしたもの
> だろうか、と悩んでいます。開発はSolarisの上でやっていて、
> "acos(単位ベクトルどうしの内積)"、という記述はいたる
> ところに出てくるので、ソースはできるだけ変更したくないのです。

 acos() 呼ぶ前に引き数をチェックするルーチンを
入れるのが、普通 (というか常識) ではないでしょうか。

# 呼んだあとに errno が EDOM になってないか調べて
# どうにかするのでもいいですけど :-)

 浮動小数点演算機構を使っている以上、ソースで
チェックを行わず、処理系の方に解決策を求めるのは
ちょっと無理だと思います。

-- 
中野@成蹊大

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: