이것은 (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
, float 치를 것을 좋아하지 않는 것을 알 수 있습니다. 그러나 $theLog
은 올바른 값을 유지합니다.
왜 bc 함수의 동작이 한 파일에서 다른 파일로 변경됩니까?
참고 : 어떤 파일에도 bcscale
이 설정되어 있지 않으며 bcscale(10);
으로 설정하면 결과가 동일합니다.
값을 텍스트 블록 대신 배열로 지정하면 아무 것도 바뀌지 않습니까? –
정말 두 파일이 같은가요? diff를 만들었습니까? 예 : 동일한 시스템에서 실행되고 있습니까? – jigfox
@Pekka : 문제를 알게 된 후, heredoc 대신 배열을 사용할 수 있다고 말할 수 있습니다. 그러나 실제로는 수백 가지의 값이 있으며 옵션이 아닙니다. 감사합니다 ---------------------------- @Jens : 두 파일이 같은 시스템에서 실행되고있었습니다. 나는 어떤 diff도하지 않았다. .. 내가했다면 나는 문제를 발견했을 것이다. 내 나쁜 ...하지만 상황을 감안할 때 나는 그것을하고 마일 ... 감사합니다 – acm