モジュラス演算子は残りを表示することになっています。 echo(34%100)
の場合は34
のように出力されます。しかし、なぜ私はecho(34%4294967296)
モジュラスを使用しているときにゼロ除算
答えて
4294967296
が2^32
で、32ビットの数値として表すことができない、このコードは、「Division by zero
」エラーが出るん - それが0に戻ってラップあなたがPHPの64ビット版を使用している場合は、それが動作する可能性があります。
浮動小数点モジュラスfmodを使用して、オーバーフローしないようにすることができます。
はい、私はその説明をhttp://computer-programming-forum.com/53-perl/f2805415f84c54e1.htmで説明していますが、どのようにバグを克服するには?何か修正や別の方法ラウンドはありますか? –
64ビットのPHPはまだWindows上で64ビット整数をサポートしていないため、それでも役に立たない場合もあります。 – garrettmurray
私はfmodへのリンクを追加しました – mvp
https://bugs.php.net/bug.php?id=51731
2^31 is the largest integer you can get on Windows.
あなたはまだbcmodを使用し、多数の国防省します。
だから、bcmodとfmodの違いは何ですか? –
Fmodは両側を浮動小数点に変換します.bcmodは「任意の精度の数値」(それは独自の数値型です)を使用します。 –
@ NeilNeymanああ、fmodは正確な値を表示し、bcmodは値を丸めますか? –
modには、PHPで大きな整数を使ってうごめくという報告がたくさんあります。計算のオーバーフローやバグを与える数字そのものであってもかまいません。そのために多数のライブラリを使用するのがベストです。 gmpまたはbcmathをチェックしてください。
「モジュラスを使用しているときのゼロ除算」を検索するこの質問が見つかりましたが、その理由は異なりました。
モジュラス(%
演算子)は、denomenatorが1未満のときは機能しません。fmod()を使用すると問題が解決します。
例:
$num = 5.1;
$den = .25;
echo ($num % $den);
// Outputs Warning: Division by zero
echo fmod($num, $den);
// Outputs 0.1
$num = 5.1;
$den = 1;
echo ($num % $den);
// Outputs 0, which is incorrect
echo fmod($num, $den);
// Outputs 0.1, which is correct
- 1. Bashエラー:ディレクトリパスを使用したときのゼロ除算
- 2. モジュラス除算をC、Malloc(フリー)
- 3. javaの%(モジュラス)と/(除算)の差は?
- 4. モジュラス演算子を使用して現在時刻を表示
- 5. ゼロで除算
- 6. SQLゼロ除算
- 7. 簡単なプログラミングの練習(モジュラス演算を使用して)
- 8. Awk、ゼロで除算しようとしていません
- 9. 複素数を除算しようとするとゼロで除算する
- 10. MATLABでシンボリック式を評価するときにゼロ除算
- 11. 行を挿入するときに「データ例外:ゼロ除算」
- 12. 演算子を使用してゼロを除外する方法は?
- 13. なぜゼロ除算で除算しないのですか?
- 14. ハスケルでゼロ除算
- 15. ゼロ除算警告
- 16. コードでゼロ除算
- 17. PostgreSQLによる除算ゼロによる除算
- 18. ゼロ除算C++での除算
- 19. BC計算を使用して左にゼロを維持する
- 20. モジュラス、除算、または乗算を使用せずに素数を見つける
- 21. モジュラス演算子を使用せずに剰余を計算するF#
- 22. Boost.Testライブラリを使用したゼロ除算による整数除算の処理方法?
- 23. モジュラス演算子を使用した残存変動額(JavaScript)
- 24. ゼロを使用した計算式
- 25. モジュラス除算は整数を返しますか?
- 26. Int vs Doubleとゼロ除算例外
- 27. オドゥ9 qwebフロート除算ゼロ
- 28. Laravel 5.1のゼロ除算5.1
- 29. スタンドアロンプログラムでゼロ除算
- 30. SSRS 2012ゼロ除算エラー
使用 'エコーFMOD(34、4294967296);' 'プリント34' –
使用'エコーbcmod('34' 、 '4294967296'); '[プリント' 34']( http://3v4l.org/5lYTP) –
fmodとbcmodの両方が動作するようになりましたが、今はどちらを使うのが混乱しています。私は膨大な数を処理していますが、関数bcmodまたはfmodをお勧めしますか? –