2012.07.28 Saturday
数値計算の際のちょっとしたテクニック
ニューメリカルレシピのコード読んでて見つけたテクニックを紹介する。
詳細な説明は見当たらなかった。どこかに書いてあったのかな。
コード読んでて何だ?この処理。ってなった内容なのでメモとして残しておく。
if(b/a < c) ...
というコードを考える。...は適当な文ね。
割り算は気持ちが悪いので
if(a>0)
{
if(b<a*c)...
}
else
{
if(b>a*c)...
}
とした方が気持ちはすっきりする。
a<0のときは
b>a*c → -b<-a*c → -b<|a|*c
と書ける。つまり、
if(a<0) b *= -1;
if(b<|a|*c)...
と書いても同じことである。おおー、ってなった。
一般的によく知られているテクニックなのかもしれないけど始めて知った。
もちろんa=0の場合には注意が必要だけど。
詳細な説明は見当たらなかった。どこかに書いてあったのかな。
コード読んでて何だ?この処理。ってなった内容なのでメモとして残しておく。
if(b/a < c) ...
というコードを考える。...は適当な文ね。
割り算は気持ちが悪いので
if(a>0)
{
if(b<a*c)...
}
else
{
if(b>a*c)...
}
とした方が気持ちはすっきりする。
a<0のときは
b>a*c → -b<-a*c → -b<|a|*c
と書ける。つまり、
if(a<0) b *= -1;
if(b<|a|*c)...
と書いても同じことである。おおー、ってなった。
一般的によく知られているテクニックなのかもしれないけど始めて知った。
もちろんa=0の場合には注意が必要だけど。