Это самая странная вещь, которая когда-либо случалась со мной, так как я программист (PHP) ...
У меня есть два файла со следующим кодом (proj. Euler stuff), которые возвращают разные результаты.
<code><?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 '
';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);
, результат будет точно таким же.