8

是否有任何可用于 Java 的完全兼容的 IEEE754r 实现支持 Java 选择省略的所有功能(或者更确切地说,一般来说高级语言喜欢省略):

  • 陷阱
  • 粘滞标志
  • 定向舍入模式
  • 加长/长双
  • 四倍精度
  • DPD(密集小数)

在任何人弄错之前进行澄清:我不是在寻找 JVM 为上述提供任何支持,只是一些在软件中实现类型和操作的类,基本上是已经存在的原始包装类 Float/ 的风格。双倍的。

4

2 回答 2

5

不,不存在完全兼容的 IEEE754R 实施。不仅在 Java 中,而且在所有当前可用的语言中(状态 2012 年 7 月)。

编辑:海报要求 IEEE754 R支持与 IEEE 754-2008 相同。如果我想添加没有这样的事情的所有原因,这会很长。

  • 陷阱:不,使用 SIGFPE 调用具有 OVERFLOW、UNDERFLOW、INEXACT 等的自己的例程不是陷阱。参见 IEEE754(旧版本)第 10 页。21 什么是陷阱。信号 NaN。NaN 有效载荷访问。标志访问。列举可以做到这一点的语言。

  • 舍入模式:新标准将 roundTiesToAway (p. 16) 定义为新的舍入模式。不幸的是,AFAIK 没有支持这种模式的处理器,也没有软件仿真。

  • 四倍精度:仅在极少数编译器中支持,甚至更少未损坏的编译器。

  • Densely packed Decimals:可能只支持使用小数的语言,例如 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) 

“所有这些例程也有浮点变量,仅在参数和返回类型上有所不同。类是 org.dosereality.util.IEEE754”

Sun 错误参考 2003

于 2012-07-13T16:41:57.397 回答