問題タブ [divide-by-zero]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - シンボリック回帰を行うときにゼロ除算を防ぐ方法は?ECJ
数式でシンボリック回帰を実行する遺伝子プログラムを書いています。私はECJを使用しています。これが何であるか、そして私が始めたベースの例については、ECJに付属するサンプルのチュートリアル4を参照してください。
問題は、遺伝子プログラムの関数として除算を実装するときに発生します。ゼロ除算をどのように防ぎますか?
c++ - DBL_MINに対して0.0によるC++二重除算
ダブルの逆平方根を見つけるとき、0.0またはMIN_DBLで無効な非正の入力をクランプする方が良いですか? (以下の私の例でdouble b
は、浮動小数点の丸め誤差と、ゲーム内で物理法則がわずかに曖昧であるために、負になる可能性があります。)
0.0による除算とMIN_DBLはどちらも、ゲームで同じ結果を生成します。これは1/0.0
、と1/DBL_MIN
が事実上無限であるためです。私の直感では、MIN_DBLの方が適していると言われていますが、0.0を使用する場合はありますか?おそらくのようsqrt(0.0)
に、そしてそれらは特殊なケースであるため1/0.0
、乗算はより速く実行されます。1.#INF000000000000
MSVCでの二重除算:
java - 1/0 は有効な Java 式ですか?
以下は私のEclipseでうまくコンパイルされます:
Java は、最初から多くの「ダム コード」がコンパイルされるのを防ぎます (たとえば、コンパイルされ"Five" instanceof Number
ません!)。そのため、これが警告ほど生成されなかったという事実は、私にとって非常に驚きでした。コンパイル時に定数式を最適化できるという事実を考慮すると、陰謀は深まります。
上記のスニペットを Eclipse でコンパイルすると、次のバイトコードが生成されます ( javap -c Div0
)
ご覧のとおり、i
およびk
代入はコンパイル時の定数として最適化されていますが、除算0
(コンパイル時に検出可能である必要があります) はそのままコンパイルされます。
javac 1.6.0_17
はさらに奇妙な動作をし、サイレントにコンパイルしますが、割り当てをバイトコードi
から完全に削除しk
ます (おそらく、それらがどこにも使用されていないと判断したためです)。1/0
質問は次のとおりです。
1/0
実際、いつでもどこでもコンパイルできる正当な Java 式ですか ?- JLSはそれについて何と言っていますか?
- これが合法である場合、それには正当な理由がありますか?
- これは何の役に立つのでしょうか?
c - 1 /非常に小さなフロートを分割するときに悪いことが起こる可能性がありますか?
正のフロートAが別の正のフロートB(C99)の逆二乗よりも小さいことを確認したい場合、Bが非常に小さいと、何か問題が発生する可能性がありますか?
私はそれを次のようにチェックすることを想像することができました
しかし、Bが十分に小さい場合、これはおそらく無限大になりますか?それが起こったとしても、コードはすべての状況で正しく機能しますか?
同様の流れで、私はするかもしれません
...Bが小さい場合はB*Bがゼロになる可能性があるため、これは少し良いかもしれません(これは本当ですか?)
最後に、私が間違っているとは想像できない解決策は
これがゼロ除算になるとは思わないが、Aがゼロに近い場合は問題が発生する可能性がある。
つまり、基本的に、私の質問は次のとおりです。
- Xがゼロより大きい(ただし小さい)場合、1 / Xは無限大になる可能性がありますか?
- Xがゼロより大きい場合、X * Xをゼロにすることはできますか?
- 無限大との比較は、私が期待するように機能しますか?
編集:疑問に思っている人のために、私はやることになりました
どの乗算が最初に発生するかが視覚的に明確であるため、この順序で実行しました。
c++ - ゼロによる除算: 未定義の動作または実装が C および/または C++ で定義されていますか?
ゼロ除算に関して、標準は次のように述べています。
C99 6.5.5p5 - / 演算子の結果は、第 1 オペランドを第 2 オペランドで割った商です。% 演算子の結果は剰余です。どちらの操作でも、2 番目のオペランドの値がゼロの場合、動作は未定義です。
C++03 5.6.4 - 二項 / 演算子は商を生成し、二項 % 演算子は最初の式を 2 番目の式で割った剰余を生成します。/ または % の 2 番目のオペランドがゼロの場合、動作は未定義です。
上記の段落を額面どおりに受け取るとしたら、答えは明らかに両方の言語の未定義の動作です。ただし、C99 標準をさらに下に見ると、矛盾しているように見える次の段落が表示されます(1)。
C99 7.12p4 - マクロ INFINITY は、利用可能な場合、正または符号なし無限大を表す float 型の定数式に展開されます。
標準には、未定義の動作が (潜在的に) 矛盾するステートメントに取って代わられない、ある種の黄金律がありますか? それを除けば、実装で INFINITY マクロが定義されている場合、ゼロによる除算はそのように定義されていると結論付けるのは不合理ではないと思います。ただし、実装でそのようなマクロが定義されていない場合、動作は未定義です。
2 つの言語のそれぞれについて、この問題に関するコンセンサスが (あるとすれば) どのようなものなのか、興味があります。int i = 1 / 0
整数除算と浮動小数点除算について話している場合、答えは変わりfloat i = 1.0 / 0.0
ますか?
注 (1)<cmath>
C++03 標準では、INFINITY マクロを含むライブラリについて言及されています。
php - PHP、ゼロ除算をキャッチする方法は?
動的に作成する必要がある大きな数式があります。たとえば、「何か」を解析すると、結果は次のような文字列になります"$foo+$bar/$baz";
。
したがって、その式の結果を計算するために、eval
関数を使用しています...次のようなものです:
ここでの問題は、ゼロによる除算があったというエラーが表示されることがあり、その例外をキャッチする方法がわからないことです。私は次のようなことを試しました:
または:
しかし、うまくいきません。では、ゼロ除算が発生したときにアプリケーションがクラッシュしないようにするにはどうすればよいでしょうか?
編集:
まず、明確にしたいことがあります。式は動的に構築されるため、分母がゼロの場合は評価できません。では、Mark Baker のコメントについて、例を挙げましょう。私のパーサーは次のようなものを構築できます:
パーサーは、変数の値を気にせずに文字列を段階的に構築します...したがって、この場合$foz == $bak
、実際にゼロによる除算がある場合: $baz / ( 0 )
.
一方、ピートが提案したように、私は試しました:
しかし、それは何も印刷しません。
math - 0 を 0 で割るとエラーになるのはなぜですか?
コードで行う計算でこの問題に遭遇しました。除数も0の場合、除数は0です。私のコードでは、その場合は 0 を返します。ゼロ除算は一般的に定義されていませんが、この場合の例外を作成しないのはなぜですか? ゼロ除算が定義されていない理由は、基本的には元に戻すことができないということです。ただし、ケース 0/0 ではこの問題は見られません。
編集OKなので、この質問は多くの議論を引き起こしました。多くの票を獲得したという事実に基づいて、熱心に回答を受け入れるという過ちを犯しました。問題を分析する方法についてのアイデアを提供するため、AakashM の回答を受け入れました。
sql - 構文が正しいと思われる場合に発生するゼロによる簡単なSQL除算
私は次の構文を使用しています:
それでも私はまだこのエラーを受け取っています:
メッセージ8134、レベル16、状態1、行3ゼロ除算エラーが発生しました。
私はここで何が間違っているのですか?
私のクエリ全体は以下のとおりです。
sql-server-2005 - SQL Server: クエリで 0 による除算を処理する方法
次のようなクエリがあり、パーセンテージを取得しています。
通常、これは 59.77803 のような値を返します。しかし、2 番目の SUM (分母) が 0 になる可能性がある (当然のことながら) ケースがあることがわかります。このケースを説明し、0 による除算の例外を回避する方法を知っている人はいますか?
SQL Server 2005 を使用しています。ありがとうございます。
c++ - ゼロ除算を安全に処理するC/C ++関数はありますか?
他の2つの値v1とv2がゼロからどれだけ離れているかに基づいて、 2つの値w1とw2のある種の加重平均を実行したい状況があります...例:
- v1がゼロの場合、重み付けはまったく行われないため、w2を返します。
- v2がゼロの場合、重み付けはまったく行われないため、w1を返します。
- 両方の値がゼロから等しく遠い場合、平均を実行して(w1 + w2)/2を返します。
私は次のようなコードを継承しました:
少し背景として、v1とv2は、2つの異なるノブをどれだけ回したかを表します。個々の結果のエフェクトの重みは、どちらの方向ではなく、どれだけ回したかにのみ依存します。
明らかに、これには問題があります。これは、v1==v2==0
最終的にはreturn (0/0)*w1 + (0/0)*w2
実行できなくなるためです 0/0
。v1==v2==0
浮動小数点数を使用するのは悪い習慣ではなかったとしても、数学的に恐ろしい音に対して特別なテストを行うこと。
だから私は疑問に思いました
- これを処理するための標準ライブラリ関数がありました
- きちんとした数学的表現があります