問題タブ [fenv]
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 - MS コンパイラ用の C99 fenv.h
MSコンパイラ用のまともなC99 fenv.h実装を知っている人はいますか?
これは難しくないと思います。時間を節約したいだけです。
c - feholdexceptなどの用途は何ですか?
すべてのドキュメント (標準の)はかなり紛らわしいですが、浮動小数点例外の「ノンストップ モード」の概念fenv.h
については特に混乱しています。feholdexcept
私が知る限り、IEEE 浮動小数点の実装では、例外はデフォルトで非シグナリング/「ノンストップ」であり、デフォルトでfenv.h
ない限り、インターフェイスはシグナリング モードを有効にする方法を提供していないようです。feholdexcept
非 IEEE システムまたはシグナリング例外マスクを設定するための非標準拡張機能を備えたシステムを除いて、全体の概念は役に立たないのですか?
c - 浮動小数点例外 - gcc バグ?
次のコードを検討してください。
に対応するゼロ以外の値を出力することを期待しますが、0 をFE_DIVBYZERO
出力します。 の 2 行目を に変更するとmain
、double x = 1.0/0.0;
期待される動作が得られます。これは許可されていますか、それともバグですか?
編集:最初は、ほとんどの実際のコードでは、fenv 例外が発生する可能性のある操作を最適化できなかったように見えるかもしれません。そのため、大規模な計算を安全に実行し、最後にオーバーフロー、div-by-zero などが発生しました。ただし、インライン化と最適化を検討すると、事態が混乱し、実際の問題が発生します。そのような関数が、定数引数のために常にゼロで除算される状況でインライン化された場合、gcc は非常にスマートになり、インライン化された関数全体を本質的にreturn INFINITY;
例外を発生させずに最適化する可能性があります。
c - 64 ビットの Cygwin で _fe_dfl_env への未定義の参照を生成するのはなぜですか
私はウェブを見回して、これを見つけました: http://www.cygwin.com/ml/cygwin-cvs/2013-q1/msg00093.html
いくつかの詳細情報:
$ cygcheck -cd | grep gcc
gcc-core 4.8.1-3
gcc-fortran 4.8.1-3
gcc-g++ 4.8.1-3
gcc-objc 4.8.1-3
gcc-objc++ 4.8.1-3
gcc-tools-epoch1-autoconf 2.59-2
gcc-tools-epoch1-automake 1.9.6-2
gcc-tools-epoch2-autoconf 2.64-2
gcc-tools-epoch2-automake 1.11.6-1
libgcc1 4.8.1-3
mingw-gcc-debuginfo 4.7.3-1
mingw64-i686-gcc-debuginfo 4.8.1-2
$ uname -a
CYGWIN_NT-6.2 Raven 1.7.25(0.270/5/3) 2013-08-31 20:37 x86_64 Cygwin
c++ - FENV_ACCESS プラグマは C++11 以降に存在しますか?
FENV_ACCESSプラグマをサポートしていないclangのバグレポートを読んで、コメントに出くわしました:
を使用せずに丸めモードを設定すると、
#pragma STDC FENV_ACCESS ON
未定義の動作が呼び出されます。C11 7.6.1/2 を参照してください。(このプラグマは C++ には存在しないため、<cfenv> は使用できませんが、それは私たちのせいではありません...)
このプラグマは本当に C++ に存在せず、<cfenv>
使用できなくなるのでしょうか? C++11 標準で検索しようとしましたが、実際にはまったく言及されていません。プラグマは関数プロトタイプと共に C から継承されますか? それとも、プラグマが使用されていないときの動作が未定義であることについてC++標準は何も言っていないので、実際にはUBを回避する必要はありません(プラグマについてまったく言及していないため)?
c++ - MinGW での fenv.h の使用
このトピックとcppreferenceで提案されているように、標準ライブラリを使用して浮動小数点の丸めモードを変更したいと考えています。環境としてMingGWを使用しています。プロジェクトのビルドには CMake を使用します。私のコード:
main.cpp:
CMakeLists.txt:
ただし、コンパイル中に次のエラーが発生します。
それは私のコードでは利用できないコンテンツ<fenv.h>
です(の条件#if _GLIBCXX_USE_C99_FENV_TR1
が満たされ\MinGW\lib\gcc\mingw32\4.8.1\include\c++\fenv.h
ていません)。私は何を間違っていますか?
c - 浮動小数点例外のトラップはどのように生成されますか?
トラップが有効になっているときに、glibc ライブラリーのどのコードとファイルが浮動小数点例外のトラップを生成するかを知りたいです。
現在、RISC-V の GCC は浮動小数点例外をトラップしません。この機能の追加に興味があります。そこで、この機能が GCC for x86 でどのように実装されているかを調べていました。
この [質問] ( C での浮動小数点オーバーフローのトラップ) で説明されているようにシグナルをトラップできることは承知していますが、それがどのように機能するかについて詳しく知りたいです。
私はglibc/mathのファイルを調べましたが、これは私によれば、次のようなトラップを生成する何らかの形になっています
で始まる他の多くのファイルfe
。
これらのファイルはすべて、RISC-V の glibc にも存在します。x86 の glibc がトラップを生成する方法を理解できません。