En un programa CUDA, recientemente he cambiado de pruebas para inifinity usandoLas pruebas para el infinito en CUDA
return x==INFINITY || x==-INFINITY;
donde INFINITY
es de math.h, a
return !isfinite(x);
y se sorprendió al llegar diferentes resultados gnu.org sugiere que en realidad deberían comportarse de manera similar. ¿Me estoy perdiendo de algo? ¿No está permitido usar INFINITY
en un kernel CUDA?
Editar: acabo de descubrir isinf
y se dio cuenta que la comprobación utilizando
return isinf(x);
da el mismo resultado que el cheque infinito. ¿Por qué no está isfinite(x)==!isinf(x)
?
¿Para qué valores difirieron los resultados? ¿Cuáles fueron los resultados? ¿Cuáles fueron los resultados esperados? –
aún no estoy seguro, pero parece que isfinite es más estricto que la prueba INFINITY. – hannes
@stephen canon: concedido, pero los documentos de Cg no mencionan la macro INFINITY de math.h, la diferencia sobre la que estoy preguntando. Aparentemente, la macro INFINITY funciona como isinf (ver mi edición), por lo que tiene cierta relevancia. – hannes