Javaが省略したすべての機能(または一般的に省略したい高級言語)のサポートを提供する、Javaで利用可能な完全準拠のIEEE754r実装はありますか?
- トラップ
- スティッキーフラグ
- 有向丸めモード
- 拡張/ロングダブル
- 四倍精度
- DPD(密にパックされた小数)
誰かが誤解する前の明確化:上記をサポートするJVMを探しているのではなく、ソフトウェアで型と操作を実装するクラス、基本的には既存のprimitveラッパークラスFloat/のスタイルのクラスだけを探しています。ダブル。
Javaが省略したすべての機能(または一般的に省略したい高級言語)のサポートを提供する、Javaで利用可能な完全準拠のIEEE754r実装はありますか?
誰かが誤解する前の明確化:上記をサポートするJVMを探しているのではなく、ソフトウェアで型と操作を実装するクラス、基本的には既存のprimitveラッパークラスFloat/のスタイルのクラスだけを探しています。ダブル。
いいえ、完全に準拠した IEEE754R 実装は存在しません。Java だけでなく、現在利用可能なすべての言語に対応しています (2012 年 7 月の状況)。
編集: ポスターは、 IEEE 754-2008 と同一の IEEE754 Rサポートを求めました。そのようなことがない理由をすべて追加したい場合、これは長くなります。
トラップ: いいえ、SIGFPE を使用して OVERFLOW、UNDERFLOW、INEXACT などで独自のルーチンを呼び出すことはトラップではありません。IEEE754 (古いもの) を参照してください。トラップを構成するものについては21。NaN のシグナリング。NaN ペイロード アクセス。フラグ アクセス。それができる言語を列挙してください。
丸めモード: 新しい標準では、新しい丸めモードとして roundTiesToAway (p. 16) が定義されています。残念ながら、このモードをサポートするプロセッサはなく、ソフトウェア エミュレーションもありません。
4 倍精度: 非常に少数のコンパイラでのみサポートされており、壊れていないコンパイラはさらに少数です。
高密度にパックされた 10 進数: おそらく 10 進数を使用する言語 (COBOL など) でのみサポートされます。
すべての集合の交点: 空集合。なし。何もない。
double nextAfter(double x, double y) - returns the double adjacent to x in the direction of y
double scalb(double x, int e) - computes x*2e quickly
boolean unordered(double c1, double c2) - returns true iff the two cannot be compared numerically (one or both is NaN)
int fpclassify(double value) - classifies a floating-point value into one of five types:
FP_NAN: "not any number", typically the result of illegal operations like 0/0
FP_INFINITY: represents one end of the real line, available by 1/0 or POSITIVE_INFINITY
FP_ZERO: positive or negative zero; they are different, but not so much that it comes up much
FP_SUBNORMAL: a class of numbers very near zero; further explanation would require a detailed examination of the floating-point binary representation
FP_NORMAL: most values you encounter are "normal"
double copySign(double value, double sign) - returns value, possibly with its sign flipped, to match "sign"
double logb754(double value) - extracts the exponent of the value, to compute log2
double logb854(double value) - like logb754(value), but with an IEEE854-compliant variant for subnormal numbers
double logbn(double value) - also computing log2(value), but with a normalizing correction for the subnormals; this is the best log routine
double raise(double x) - not actually an IEEE754 routine, this is an optimized version of nextAfter(x,POSITIVE_INFINITY)
double lower(double x) - not actually an IEEE754 routine, this is an optimized version of nextAfter(x,NEGATIVE_INFINITY)
「これらのルーチンはすべて float バリアントも持ち、引数と戻り値の型のみが異なります。クラスは org.dosereality.util.IEEE754 です」