Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 数値
  3. 浮動小数点の比較

浮動小数点を比較する

コンピュータは内部的には2進数を使って演算しているので、2進数で表現できない小数については計算の過程で誤差が生まれます。2進数の演算の過程で発生した誤差の影響を無視するためには、ある有効桁で数値を丸めて比較する必要があります。

桁を丸めるにはsprintf関数を使用します。

sprintf("%.5g", $num1);

"%.5g" は浮動小数点を有効桁5桁に丸めるという書式指定です。

サンプルプログラム

浮動小数点を比較するサンプルです。

use strict;
use warnings;

my $num1 = 1;
my $num2;

# 0.1を10回加算
for my $i (1 .. 10){
  $num2 += 0.1;
}

print "(1)誤差が生まれる。\n";
if ($num1 != $num2) {
  print '$num1と$num2は等しくない' . "\n\n";
}

print "(2)-1 浮動少数点を有効桁5桁で丸めて比較(等しい)。\n";
my $num1_cut5 = sprintf("%.5g", $num1);
my $num2_cut5 = sprintf("%.5g", $num2);

print $num1_cut5 . "\n";
print $num2_cut5 . "\n";
  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。