implementación del libra de libra (flotante, flotante) del kernel androide

Estoy probando casos de la esquina en la llamada del pow ( #include <math.h> ), específicamente pow(-1, Inf) .

En mi escritorio (Ubuntu) obtengo el resultado 1.0, esto está de acuerdo con la especificación de punto flotante IEEE 2008.

Ejecutar la misma prueba cuando se ejecuta el núcleo de Android Gingerbread y me NaN devuelto.

He mirado alrededor y puedo ver que hay muchas implementaciones de pow en las bibliotecas estándar para diferentes plataformas y en el caso pow(-1, Inf) que están codificados para producir resultados diferentes.

La pregunta es cuál debe ser considerado correcto? ¿Ideas o pensamientos?

Me disculpo si estoy publicando en el foro equivocado, seguí el enlace de los recursos para desarrolladores de Android y terminé aquí.

El estándar C es perfectamente claro en este punto (§F.9.4.4); no hay espacio para "ideas o pensamientos":

pow (-1, ± ∞) devuelve 1.

El Anexo F sólo se aplica si una implementación define __STDC_IEC_559__ , pero no hay duda de que 1.0 es la respuesta correcta.

Sospecho que este es un Java-ismo que se ha filtrado en el NDK. (Java define pow(-1,infinity) como NaN ):

Si el valor absoluto del primer argumento es igual a 1 y el segundo argumento es infinito, entonces el resultado es NaN.

Editar: Desde Matteo objeta que esto "no tiene sentido", voy a ofrecer algunas frases de explicación de por qué el comité hizo esta elección. Aunque lim_ {n-> inf} (-1) ^ n no existe en los números reales, debemos recordar que los números de punto flotante no son números reales y, de hecho, para todos los números de punto flotante suficientemente grandes y , pow(-1,y) es +1 . Esto se debe a que todos los números de punto flotante suficientemente grandes son incluso enteros. Desde esta perspectiva, es bastante razonable definir pow(-1,infinity) como +1 , y esto resulta en realidad conducir a un comportamiento más útil en algunos cálculos de punto flotante.

Hay un número sorprendente de matemáticos extremadamente competentes (así como programadores muy calificados y escritores de compiladores) involucrados tanto con los comités C como con los comités IEEE-754, y no toman estas decisiones de manera negligente. Cada estándar tiene errores, pero este no es uno de ellos.

  • No se puede emitir desde el tipo de origen al tipo de destino (JNIEnv.GetArray <Java.Lang.Object> (pudis.Handle);)
  • Encuentra color dominante en un marco de cámara en OpenCV Android
  • Convertir jstring a QString
  • Detección del navegador Android Phone
  • Error: 'to_string' no es un miembro de 'std'
  • Android Studio - Biblioteca de módulos App + NDK
  • _vscprintf equivalente en Android?
  • Cómo utilizar unordered_map en Android?
  • Cómo inflar una vista en expansión con una vista de relación de aspecto fija
  • Android ndk: Problema para la llamada del método Java desde c ++ con jni
  • Uso de libVLC para Android en la plataforma Windows
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.