两个文件,完全相同的代码,不同的输出?

时间:2010-07-22 11:19:46

标签: php heredoc bcmath

由于我是一名(PHP)程序员,这是我遇到过的最奇怪的事情......

我有两个文件,使用以下代码(proj.euler stuff)返回不同的输出。

<?php
$numbers =<<<eot
2,3
5,2
9,3
4,9
6,3
10,5
eot;
$numbers = explode("\n",$numbers);
$max = 0;
foreach($numbers as $k => $n){
    list($base,$expo) = explode(',',$n);
    $theLog = log($base,10);
    $result = bcmul($theLog,$expo,10);

    if(bccomp($result,$max,10) == 1){
        echo '<br/>max so far is ' . $result . ' for base ' . $base . '[log:'.$theLog.'] and exponent ' . $expo ;
        $max = $result;
    }
}
echo '<pre>';
print_r($numbers);
echo '</pre>';
echo $max;

FILE1,euler.php //按预期输出:

max so far is 0.9030899869 for base 2[log:0.30102999566398] and exponent 3
max so far is 1.3979400086 for base 5[log:0.69897000433602] and exponent 2
max so far is 2.8627275283 for base 9[log:0.95424250943932] and exponent 3
max so far is 5.4185399219 for base 4[log:0.60205999132796] and exponent 9

5.4185399219

FILE2,euler2.php //虚假输出:

max so far is 5 for base 10[log:1] and exponent 5

5

有人能想出这种情况发生的正当理由吗?

我已经测试了它,我可以告诉你,在euler2.php中,假冒的$result = bcmul($theLog,$expo,10);不喜欢$theLog是浮点值,因此bcmul(0,$expo) = 0。但是,$theLog具有正确的价值。

为什么bc函数行为会从一个文件更改为另一个文件?

注意:任何文件中都没有设置bcscale,如果我将其设置为bcscale(10);,则结果完全相同。

2 个答案:

答案 0 :(得分:3)

您的文件中有不同的EOL字符。我可以使用Windows EOL(\r\n)重新编写您的错误,并使用Unix EOL(\n)更正行为。

答案 1 :(得分:2)

有时,当文件看起来相同时,它们可以有不同的编码或行尾。

不能说为什么会影响你的结果。

尝试区分它们(例如使用WinMerge

使用Notepad++,您可以通过格式菜单轻松编辑编码和/或行尾。