かわいいは正義
ただの日記ですよ(・ω・)
2016年8月27日土曜日
PerlでNaNを使う.
Perlで数値解析をする際,ゼロ除算を適切に扱う必要がある.Perlはv5.6.1以上であればNaNを使える.NaNはどんな演算をしてもNaNとなるが,実数NaN共にゼロ除算ではエラーを吐いて止まってしまう.ゼロ除算時にNaNを発生し伝搬させるためには,分母が0であればNaNとなる様な関数を書いてやればよい(下の例ではsub DivNaN).
ちなみに無限も'inf'として使える.
#!/bin/perl $value = 10; $value = &DivNaN($value , 20); printf("10/20= $value\n"); $value = &DivNaN('inf' , 20); printf("inf/20= $value\n"); $value = &DivNaN('nan' , 20); printf("nan/20= $value\n"); $value = &DivNaN(10 , 0); printf("10/0= $value\n"); $value = &DivNaN('nan' , 'nan'); printf("nan/nan= $value\n"); $value = &DivNaN('nan' , 0); printf("nan/0= $value\n"); sub DivNaN { my ($numerator, $denominator) = @_; if ($denominator eq 0){ return 'nan'; } else { return $numerator / $denominator; } }
% perl test.pl 10/20= 0.5 inf/20= inf nan/20= nan 10/0= nan nan/nan= nan nan/0= nan
2016年8月26日金曜日
octaveで関数プロット時に"error: expecting integer index..."と表示されエラーになる
octave では変数や関数を自作する事ができるが,変数と関数に同じ名前をつけることが出来ない.関数を変数で上書きした後に関数を呼び出すと,"error: expecting integer index..."とエラーになる.
octave:1> sin(pi)
ans = 1.2246e-16
octave:2> sin=10
sin = 10
octave:3> sin(pi)
error: expecting integer index, found 3.141593 ← エラーになる
octave:3> clear sin
octave:4> sin(pi)
ans = 1.2246e-16
octave:5>
はまったのでメモ.
参考リンク.ハンガリー語のスライド.
http://xymarkus.web.elte.hu/Jegyzet/Fiznum_1_ea-10-11_csabai/lecture02.pdf
‹
›
ホーム
ウェブ バージョンを表示