問題タブ [floating-point-exceptions]
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.
c++ - ユーザー定義関数を使用して「完全数」を検索中に浮動小数点例外エラーが発生しました
ユーザーが指定した特定の範囲で「完全数」をチェックしてプログラムを作成する必要があります。特定の数が完全数かどうかを調べるユーザー定義関数を作成しました。そうである場合は 1 が返され、そうでない場合は 0 が返されます。次に、メイン プログラムで if ステートメントを使用して完全数を出力します。私が得ている問題は、浮動小数点例外エラーです。私は今何をすべきか分かりません。私はいくつかの助けに本当に感謝します. :)。
c++ - 算術演算で SIGFPE とオーバーフローを適切に回避する方法
C++、クラス、および関連するものを自分で学習するために、できるだけ完全な Fraction クラスを作成しようとしています。とりわけ、浮動小数点の例外とオーバーフローに対してある程度の「保護」を確保したかったのです。
目的:
一般的な演算で見られる算術演算でのオーバーフローと浮動小数点の例外を回避し、消費する時間/メモリを最小限に抑えます。回避できない場合は、少なくとも検出します。
また、アイデアは、より大きな型にキャストしないことです。これにより、いくつかの問題が発生します(より大きなタイプがない可能性があるなど)
私が見つけたケース:
+、-、*、/、pow、root のオーバーフロー
操作はほとんど簡単です (
a
とb
ですLong
):- a+b: LONG_MAX - b > a の場合、オーバーフローが発生します。(不十分。
a
またはb
マイナスになる可能性があります) - ab: LONG_MAX - a > -b の場合、オーバーフローが発生します。(同上)
- a*b: LONG_MAX / b > a の場合、オーバーフローが発生します。(b != 0 の場合)
- a/b: a << b の場合は SIGFPE をスローするか、b << 0 の場合はオーバーフローをスローする可能性があります
- pow(a,b): (pow(LONG_MAX, 1.0/b) > a の場合、オーバーフローがあります。
- pow(a,1.0/b): a/b と同様
- a+b: LONG_MAX - b > a の場合、オーバーフローが発生します。(不十分。
x = LONG_MIN (または同等) の場合の abs(x) のオーバーフロー
これは面白いです。すべての符号付き型には、可能な値の範囲 [-x-1,x] があります。abs(-x-1) = x+1 = -x-1 オーバーフローのため。これは、abs(x) < 0 の場合があることを意味します。
- -1 で割った大きな数値の SIGFPE
numerator/gcd(numerator,denominator) を適用すると見つかります。ときどき gcd が -1 を返し、浮動小数点例外が発生しました。
簡単な修正:
- 一部の操作では、オーバーフローを簡単に確認できます。その場合は、いつでも double にキャストできます (大きな整数で精度が失われるリスクがあります)。アイデアは、キャストせずに、より良い解決策を見つけることです。
分数算術では、簡単化のために追加のチェックを行うことができる場合があります。a/b * c/d (互いに素) を解くために、最初に a/d と c/b を互いに素にすることができます。
または<0 または > 0 かどうそのオーバーフローを回避する関数 neg() を作成できますa
かを尋ねる場合、私はいつでもカスケードを行うことができます。b
そのひどい選択に加えて、- abs(x) の gcd と同様の状況 (どこでも x > LONG_MIN) を取ることができます
2. と 3. が最適な解決策かどうかはわかりませんが、十分だと思われます。私はそれらをここに投稿しているので、誰かがより良い答えを持っているかもしれません.
最も醜い修正
ほとんどの操作では、オーバーフローをチェックして回避するために、多くの追加操作を行う必要があります。これで、1つか2つのことを学ぶことができると確信しています。
例:
これらの算術演算でオーバーフローを回避する最善の方法はどれですか?
編集: このサイトには非常によく似た質問がいくつかありますが、それらは同じではありません (特定の関連のない状況では、回避する代わりに検出する、署名する代わりに署名しない、SIGFPE)。
それらすべてをチェックすると、次のような適切な回答を提供するために修正時に役立つ可能性のあるいくつかの回答が見つかりました。
- 符号なし加算でオーバーフローを検出します (私の場合ではなく、符号付きで作業しています):
符号付き演算のオーバーフローを検出します。これは、分岐が多く、少し一般的すぎる可能性があり、オーバーフローを回避する方法については説明していません。
回答で言及されているCERTルールは良い出発点ですが、ここでも検出方法についてのみ説明します。
他の回答は一般的すぎるため、私が見ているケースにより具体的な回答があるかどうか疑問に思います。
c - float または double 変数のない浮動小数点例外
次のコードで「浮動小数点例外、コアダンプ」という問題が発生していますが、float 変数または double 変数が 1 つもありません。printf をチェックすることで、isPrimeFunction で実行ジャムが発生することがわかりました。
c++ - C++ 線形ハッシュ浮動小数点例外 (コア ダンプ)
質問が投稿されたことは知っていますが、残念ながら私の問題への回答を関連付けることができなかったので、もう一度質問します...
私は線形ハッシュプロジェクトに取り組んでいます。私のコードは基本的に、動的に成長するハッシュ テーブルを作成する必要があります。要素は固定サイズ (配列) のバケットに格納され、テーブルにはさらにバケットがあります。すべてのバケットはオーバーフロー バケット (元のバケットに場所がなくなったときに作成される) を持つことができ、オーバーフローが作成されるたびに、いわゆる「分割」が実行され、テーブルにもう 1 つのバケットが追加され、テーブルが再ハッシュされます。詳細はありますが、これらの基本は私のコードを理解するのに十分だと思います..
だから私はデータ構造要素とバケットを持っており、バケットには要素を挿入し、それを見つけ、オーバーフローを作成するなど、いくつかの独自のメソッドがあります.私が使用しなければならない方法。全体がポインターで動作し、テストに使用するいくつかのテストファイルがあります。
今コードをテストすると、コンパイルされますが、ある時点で次のエラー メッセージが返されます:
コードのこの部分は、モジュロを使用するハッシュ関数で動作しますが、ハッシュ関数は次のとおりであるため、これがどのように浮動小数点例外を引き起こすかわかりません。
ここで見ることができる残りのコードhttps://pastebin.com/HXeUpaW5と最も重要な機能は次のとおりです。
--> findElement(const_reference key) - 51 ~ 69 行目
--> insertElementInTable(const_reference key) - createOverflow() 44-49、splitTable() 131-147、rehashAfterSplit() 153-176、および insertElementInBucket() 72-88 を呼び出す 179-197 行
問題が発生する理由がわからないため、新しい洞察を提供していただければ幸いです。ありがとう!
c++ - float データ型がないのに、このコードで浮動小数点例外が発生するのはなぜですか?
ゼロで除算しておらず、コードに float データ型がありません。それでも浮動小数点例外が発生します。
同じことに関する以前のすべての質問には、ゼロで割るという同様の問題がありましたが、変数 deno は としてゼロになることはありませんn>=2
。
私の側からの以前の研究:
問題文: https://www.hackerrank.com/contests/projecteuler/challenges/euler025/problem
2 つのテスト ケースに合格し、2 つ失敗します。すべて非表示のテスト ケースです。結果イメージ
入力 1 50 を渡すと、エラーを再現できます。詳細: