注目★★★★★Lobsters
PHP と Lua の log 関数は単調性を保証しない――数学的な落とし穴
30秒で把握
- 1PHP / Lua の log 関数が単調性を保証せず、わずかな浮動小数点誤差で出力が逆転することを報告
- 2ソート・範囲検索・最適化など単調性を前提するアルゴリズムで予期しないバグを引き起こす可能性
- 3log 結果をそのまま比較せず元の値で比較するか、明示的に誤差限度を設定して対応が必要
要約
PHP と Lua の log 関数は数学的な単調性を満たさず、入力が増加しても出力が必ず増加しないという問題を指摘している。浮動小数点演算の丸め誤差により、わずかに異なる入力値で逆転した出力が得られる場合がある。この非単調性は ソート・バイナリサーチ・最適化アルゴリズムなど単調性を前提とするロジックでバグを引き起こす可能性がある。数値計算を含む比較・ソート・範囲検索を行う場合、log 関数の結果をそのまま信用せず、元の値で比較するか誤差限度を設定する必要がある。
あなたへの影響
PHP / Lua で数値比較やソート時に log 関数を使っているコードがあれば、想定外の順序が発生していないか確認推奨。
推奨:浮動小数点演算の丸め誤差は予測不可能なため、本来的には log 結果ではなく元の値で比較するか、許容誤差を明示的に設定するべき。