てきとうなメモ

本の感想とか技術メモとか

Math::Round

ここら辺の話を読みながらPerlってround関数ないよなあと思っていたんだけど,CPANモジュールで実装しているものがあった.それがMath::Roundなんだけども,ソースコードを見るとphpと似たような定数が使われている.

$Math::Round::half = 0.50000000000008;

sub round {
 my $x;
 my @res  = map {
  if ($_ >= 0) { POSIX::floor($_ + $Math::Round::half); }
     else { POSIX::ceil($_ - $Math::Round::half); }
 } @_;

 return (wantarray) ? @res : $res[0];
}

これが良い実装なのかは良く知らないのだが,なぜこの値になったのかがよくわからないので,ソースを読んでいるとちょっと気持ち悪いなと思ってしまう.