如果我从C ++代码传递JNI负无穷大(或NaN,或......),它在Java中是否保证为负无穷大?

时间:2015-10-28 13:00:43

标签: java c++ java-native-interface

让我们说我在Java中有一个GUI,通过JNI调用一些C ++代码。

对于Float和Double,Java有负无穷大,NaN等的硬定义值(例如参见http://docs.oracle.com/javase/6/docs/api/java/lang/Float.html#NEGATIVE_INFINITY)。在C ++上,这取决于平台,我们可以使用std :: numeric_limits访问实际值。

现在让我们说下面的伪代码是jni调用:

float NIFloat { return -std::numeric_limits<float>::infinity();}
double NIDouble { return -std::numeric_limits<double>::infinity();}

此代码可以在多个平台上运行吗?即,在Java中,以下评估为true:

Float.NEGATIVE_INFINITY == NIFloat();
Double.NEGATIVE_INFINITY == NIDouble();

在以下情况中会发生什么:

double NILongD {-std::numeric_limits<long double>::infinity();}

这会被翻译成Java Double.NEGATIVE_INFINITY吗?

如果这不是跨平台的,那么跨JNI是否有跨平台安全的方式来传达这些价值?

0 个答案:

没有答案