2012-07-13 12 views
8

¿Hay algunas implementaciones totalmente compatibles IEEE754r disponibles para Java que ofrecen apoyo a todas las características de Java eligió omitir (o lenguajes de nivel bastante alto en general, como omitir):¿Implementaciones compatibles con IEEE754 (r) para Java?

  • Trampas
  • banderas adhesivas
  • Directed modos de redondeo
  • dobles
  • Quad precisión
  • DPD (decimales densamente empaquetadas) Extended/largo

Aclaración antes de que alguien se equivoque: no estoy buscando que la JVM ofrezca ningún soporte para lo anterior, solo algunas clases que implementan tipos y operaciones en software, básicamente algo en el estilo de las ya existentes clases de envoltura primitve Float/Double.

Respuesta

5

no, no existe una implementación IEEE754R totalmente compatible. No solo en Java, sino en todos los idiomas actualmente disponibles (estado julio de 2012).

EDIT: El cartel solicitó IEEE754 R soporte que es idéntico a IEEE 754-2008. Si quiero agregar todas las razones por las cuales no existe tal cosa, esto sería largo.

  • Trampas: No, llamando las rutinas propias con rebosadero, UNDERFLOW, inexacta, etc., con SIGFPE no es una trampa. Ver IEEE754 (el anterior) p. 21 por lo que constituye una trampa. NaNs de señalización. Acceso a la carga de NaN. Acceso a la bandera. Enumerar idiomas que pueden hacer eso.

  • Modos de redondeo: el nuevo estándar define roundTiesToAway (p.16) como nuevo modo de redondeo. Desafortunadamente, no hay procesadores AFAIK que admitan este modo y tampoco emulación de software.

  • Cuádruple precisión: solo es compatible con muy pocos compiladores y aún menos compiladores que no estén rotos.

  • Decimales empacados densamente: Probablemente solo se admitirán en idiomas que usen decimales, p. Ej. COBOL.

Intersección de todos los conjuntos: Conjunto vacío. Ninguna. Nada.

+0

Sería bueno tener una cita que explique por qué las implementaciones existentes no son totalmente compatibles. –

+0

Ver explicación. –

+0

Estaba medio esperando que no hubiera implementación de software, pero por otro lado estoy algo sorprendido de que no parece haber una implementación de código abierto. – Durandal

0

This con las siguientes funciones implementadas por debajo source:

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) 

"Todas estas rutinas también tienen variantes de flotación, que sólo difieren en la argumentación y devolver tipos La clase es org.dosereality.util.IEEE754."

Sun bug reference 2003

+0

A menos que extrañara por completo la carne en la fuente, eso es solo una fracción muy pequeña de lo que pedí. – Durandal

+0

@Durandal probablemente no lo perdió en absoluto. Esta fue una que pude encontrar que proporcionó parte de la información. – Woot4Moo

Cuestiones relacionadas