問題タブ [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.
sse - AVX命令を使用すると非常に遅いプログラム
AVX 組み込み関数を使用して幾何平均 sqrt(a * b) を書き込もうとしていますが、糖蜜よりも遅くなります!
このミステリーの鍵は、私が Intel ICC 11 を使用していて、icc -O3 sqrt.cpp でコンパイルするときだけ遅いということです。icc -O3 -xavx sqrt.cpp でコンパイルすると、10 倍速く実行されます。
ただし、パフォーマンス カウンターを使用し、両方のバージョンで実行された命令の数が約 4G であるため、エミュレーションが発生しているかどうかは明らかではありません。
-------------------------------------xavx を使用して------------ ----------------------------
ある種のプロセッサ内部エミュレーションが進行中ですか? 私は、非正規数について知っていますが、加算は通常よりも 64 倍遅くなります。
c++ - マルチスレッド アプリケーションでの浮動小数点例外
浮動小数点ステータス ワードは、スレッド単位またはプロセス単位で機能しますか?
x86 32ビット用にコンパイルされたプログラムがあり、コードのいくつかの時点で呼び出します
コードのいくつかのポイントで。アプリケーションをマルチスレッド化するときにこれが問題を引き起こす可能性があるかどうかを把握しようとしています。fp コントロール ワードがスレッドごとに機能するという情報を見つけましたが、fp ステータス ワードについては何も見つかりませんでした。fp ステータス ワードがスレッド単位でない場合、fp 例外が「間違った」スレッドに表示される可能性があることを懸念しています。
assembly - div 命令を使用した x86 NASM アセンブリでの浮動小数点例外
ある数値を入力して、その数値までのすべての素数を計算しなければならない課題があります。たとえば、プログラムに 9 を入力すると、3、5、および 7 が出力されます。
ある数値が素数かどうかを判断する私の計画は、それを 2 で割り、余りが 0 かどうかを確認することです。余りが 0 の場合、プログラムは被除数から 1 を引き、一番上に戻って再度割り算します。剰余が != 0 の場合、それを画面に出力し、被除数を再び減分します。これは、被除数が 0 になるまで発生します。これだけが起こっているわけではありません。何らかの理由で、DIV
命令を使用するたびに常に浮動小数点例外が発生し、その理由や解決方法がわかりません。これを修正する方法について誰かアイデアがありますか?
c++ - エラーの取得: 浮動小数点例外
私は初心者のコーダーで、現在、スキルを向上させるために Usaco Training の問題に取り組んでいます。これは「Greedy Gift Givers」のコードです。コードを送信すると、次のようなエラーが表示されます: 実行エラー: プログラム (`gift1') がシグナル #8 で終了しました (浮動小数点例外 [通常、範囲外のメモリにアクセスしたことが原因です])。プログラムはシグナルの前に 0.000 CPU 秒間実行されました。3504 KB のメモリを使用しました。「コードを調べて、しばらくの間このエラーを修正しようとしています。誰か助けてもらえますか?これが初めての投稿なので、怒らないでください。また、私が言ったように、私はまったく新しいものです。プログラミング。
c++ - VS2010 での浮動小数点イントロスペクション - 中断せずにチェックするにはどうすればよいですか?
私はここの家々を回って、解決策を見つけたと思っていました。確かに、私が知っている問題を正しく特定しているように見えますが、すべてのシステム テスト ケースの約半分で原因不明のクラッシュが発生することもあります。
問題は、コードがクライアント コードを dll として呼び出す必要があることです。私たちはコードを制御できますが、クライアントのコードは制御できません。経験上、クライアントのコードが常に完璧であるとは限らないことがわかっています。プログラムを終了して何が問題なのかを明確に示すことで、セグメンテーション違反から保護しましたが、クライアントのコードから発生するゼロ除算の例外もいくつかありました。その後終了します。
私がやりたかったことは次のとおりです。
- クライアントの dll を実行する直前に、浮動小数点イントロスペクションをオンに切り替えます。
- クライアント コードを実行します。
- 問題がないか確認してください。
- 速度を上げるためにイントロスペクションをオフにします。
理論的にはこれを行う方法はいくつかありますが、多くは VS2010 では機能しないようです。
float_point プラグマを使用しようとしています:
これは理論的には問題ないはずであり、実際には 50% の確率でうまく機能します。
問題は float_point コントロールがオンのままで、コードの他の場所で問題を引き起こす可能性があると考えています。
microsoft.com によると:
「/fp:precise、/fp:fast、/fp:strict、および /fp:except スイッチは、ファイルごとに浮動小数点セマンティクスを制御します。float_control プラグマは、関数ごとにそのような制御を提供します。 ."
ただし、コンパイル中に次の警告が表示されます。
警告 C4177: #pragma 'float_control' は、グローバル スコープまたは名前空間スコープでのみ使用する必要があります
一見、真っ向から矛盾している。
だから私の質問は:
- ドキュメントは正しいですか、それとも警告ですか (私は警告に賭けています)?
- これを行う信頼できる安全な方法はありますか?
- 私はこれを行う必要がありますか、それとも危険すぎますか?
logarithm - 対数で浮動小数点エラーを回避しますか?
正の整数の基本的な桁数カウンター (整数が入力され、その整数の桁数が出力される) を作成しようとしています。これは私の一般的な式です:
dig(x)
に相当するものを Ruby で実装しようとしたところ、計算dig(1000)
中に 2.9999999999999996 が返されたため、3 ではなく 2Math.log
が返され、2 に切り捨てられることがわかりました。この問題を処理する適切な方法は何ですか? (このアプローチを実装するために使用される言語に関係なく、この問題が発生する可能性があると想定していますが、そうでない場合は、回答で説明してください)。