8

Javaが省略したすべての機能(または一般的に省略したい高級言語)のサポートを提供する、Javaで利用可能な完全準拠のIEEE754r実装はありますか?

  • トラップ
  • スティッキーフラグ
  • 有向丸めモード
  • 拡張/ロングダブル
  • 四倍精度
  • DPD(密にパックされた小数)

誰かが誤解する前の明確化:上記をサポートするJVMを探しているのではなく、ソフトウェアで型と操作を実装するクラス、基本的には既存のprimitveラッパークラスFloat/のスタイルのクラスだけを探しています。ダブル。

4

2 に答える 2

5

いいえ、完全に準拠した IEEE754R 実装は存在しません。Java だけでなく、現在利用可能なすべての言語に対応しています (2012 年 7 月の状況)。

編集: ポスターは、 IEEE 754-2008 と同一の IEEE754 Rサポートを求めました。そのようなことがない理由をすべて追加したい場合、これは長くなります。

  • トラップ: いいえ、SIGFPE を使用して OVERFLOW、UNDERFLOW、INEXACT などで独自のルーチンを呼び出すことはトラップではありません。IEEE754 (古いもの) を参照してください。トラップを構成するものについては21。NaN のシグナリング。NaN ペイロード アクセス。フラグ アクセス。それができる言語を列挙してください。

  • 丸めモード: 新しい標準では、新しい丸めモードとして roundTiesToAway (p. 16) が定義されています。残念ながら、このモードをサポートするプロセッサはなく、ソフトウェア エミュレーションもありません。

  • 4 倍精度: 非常に少数のコンパイラでのみサポートされており、壊れていないコンパイラはさらに少数です。

  • 高密度にパックされた 10 進数: おそらく 10 進数を使用する言語 (COBOL など) でのみサポートされます。

すべての集合の交点: 空集合。なし。何もない。

于 2012-07-14T19:37:40.460 に答える
0

これには、以下のソース実装関数があります。

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 です」

Sun バグ リファレンス 2003

于 2012-07-13T16:41:57.397 に答える