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プログラミングちゃんねるのご紹介

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!