かわいいは正義
ただの日記ですよ(・ω・)
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
0 件のコメント:
コメントを投稿
‹
›
ホーム
ウェブ バージョンを表示
0 件のコメント:
コメントを投稿