use bignum 的結果反而不准確?

use bignum 的結果反而不准確?



[Copy to clipboard] [ - ]
CODE:
$v1 = "299792458";
$v2 = "299792458";
$mem1 = $v1 + $v2;
$mem2 = 1 +( ($v1 * $v2) / (299792458)**2);
$answer = $mem1 / $mem2;
print "$answer\n";

$anwser的數值是299792458,
就是我預期的答案.

但是加了"use bignum"後,
答案竟然是"299792457.9999999299515391905902852094191",
相差0.0000000700484608094098,
到底我錯在那裡?

由於這一個涉及一個物理理論,
所以不可有太多的誤差.



[Copy to clipboard] [ - ]
CODE:
use strict;
use warnings;
use bignum;
my $v1 = 299792458;
my $v2 = 299792458;
my $mem1 = $v1 + $v2;
my $mem2 = 1 +( ($v1 * $v2) / (299792458)**2);
my $answer = $mem1 / $mem2;
print "$answer\n";

这样是可以的
把双引号去掉,原因正在寻找
see the difference

[Copy to clipboard] [ - ]
CODE:
use strict;
use warnings;
use bignum;
my $v1 = 299792458;
my $v2 = "299792458";
print ref($v1),"\n";
print ref($v2),"\n";

前者是bigint,后者则不是

QUOTE:
kernel@fairland:~/chinaunix$ ./big.pl
Math::BigInt

没事干加什么双引号啊。
對不起,
因為此程序本是用Prima做的,
當Prima獲得了InputLine中的數據後,
就會自動加上双引号

另外,謝謝您們,
我明白了,
問題好像已經解決.
主要是把string 轉回數字
http://forums.htmlhelp.com/index.php?showtopic=1614

謝謝churchmice 和 flw版主的幫助.
试了下, 编译的时候加了USE_64_BIT_INT选项的perl版本可以得到正确结果
落叶季节,思念季节
楼上的方法可以……














--------------------------------------------------------
人肉搜索