次のコードは、入力された数値が26の累乗であるかどうかを確認するためのものです。ローカルホストでは、比較はtrueであるはずのときにfalseと評価されますが、ライブphpサーバーで実行されている場合は期待どおりに機能します。
#there is an html text input
$foo = $_POST['someval'];
if(intval(log($foo, 26)) == floatval(log($foo, 26))) {
echo 'yup, that there number is a power of 26';
}
else {
echo 'nope, definitely not a power of 26';
}
ローカルホストでは、「if」が時々trueと評価されることに注意してください。これは、26の1乗おきに発生します(たとえば、26が真、676(26の2乗)が偽、17576(26の3乗)が真になります)。ただし、ライブサーバーで実行している場合は、すべてが期待どおりに機能し、「if」は26のすべての累乗に対してtrueと評価されます。
この不一致の原因がわかりません。ライブサーバーはPHP5.3.8を実行しています。それぞれPHP5.3.60と5.3.10を実行している2つの異なるローカルスタック(mampとampps)を試しましたが、両方で同じことが発生します。
また、「if」ステートメントの外で計算が行われ、運がないようにコードを記述してみました。
コードは(ライブで)想定されている場所で機能するため、これは優先度の高い問題ではありませんが、不一致があることを私は悩ませています。何が起こっているのか、または数値が26の累乗であるかどうかを確認するためのより良い方法があるかどうかを教えてください。