« 今日は一日半袖でした。 | Main | Google Contacts Data API »

11 March 2008

Perl sprintf の限界?

不思議な現象に出会いました。

0.5 では四捨五入されなかったのですが、
0.51 では 1 になりました。
0.501 でも 1 になりました。
で続けていくと、0.50000000000000001 で再び 0 に戻りました。
これは有効桁数を超えたってことなのかな?
sprintf の限界ってのが有力なんですけどね。。。

[root@colinux ~]# perl -le 'print sprintf "%.f", 0.5'0[root@colinux ~]# perl -le 'print sprintf "%.f", 0.51'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.501'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.5001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.50001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.500001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.5000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.50000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.500000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.5000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.50000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.500000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.5000000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.50000000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.500000000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.5000000000000001'1[root@colinux ~]# perl -le 'print sprintf "%.f", 0.50000000000000001'0[root@colinux ~]# perl -le 'print sprintf "%.f", 0.500000000000000001'0

ちなみに当方、

[root@colinux ~]# perl -vThis is perl, v5.8.8 built for i386-linux-thread-multi

[root@colinux ~]# uname -aLinux colinux 2.6.22-co-0.8.0 #1 PREEMPT Tue Nov 6 00:02:11 CET 2007 i686 i686 i386 GNU/Linux

です。

TrackBack

TrackBack URL for this entry:
http://bb.lekumo.jp/t/trackback/517129/31023119

Listed below are links to weblogs that reference Perl sprintf の限界?:

Comments

Hello to all, the contents existing at this site are really remarkable for people experience, well, keep up the nice work fellows.

Post a comment

Access Ranking

Powered by Six Apart
Sponsored links