Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取kotlin中double/float的尾数和指数_Kotlin_Floating Point_Double - Fatal编程技术网

获取kotlin中double/float的尾数和指数

获取kotlin中double/float的尾数和指数,kotlin,floating-point,double,Kotlin,Floating Point,Double,如何访问kotlin中双精度的尾数和指数 多平台选项是理想的,但Double类没有此类方法/属性。我可以建议所有编程语言的通用解决方案: val-mantissa=doubleValue-doubleValue.toInt()Kotlin提供了这个函数,它只是JDK的一个包装器。您可以从double-tolongbits的文档中看到: 位62-52(掩码0x7ff0000000000000L选择的位)表示指数。位51-0(掩码0x000fffffffffffffL选择的位)表示浮点数的有效位(有

如何访问kotlin中双精度的尾数和指数


多平台选项是理想的,但Double类没有此类方法/属性。

我可以建议所有编程语言的通用解决方案:

val-mantissa=doubleValue-doubleValue.toInt()

Kotlin提供了这个函数,它只是JDK的一个包装器。您可以从
double-tolongbits
的文档中看到:

位62-52(掩码
0x7ff0000000000000L
选择的位)表示指数。位51-0(掩码
0x000fffffffffffffL
选择的位)表示浮点数的有效位(有时称为尾数)

因此,您可以编写用于提取值的属性:

val Double.mantissa get() = toBits() and 0x000fffffffffffff
val Double.exponent get() = toBits() and 0x7ff0000000000000 shr 52

fun main() {
    println(1.0.mantissa)
    println(1.0.exponent)
}
输出:

0
1023

请注意,这些是原始IEEE-754编码值。如果需要数值,您需要根据IEEE-754规范进行转换。

对不起,如果我不清楚,尾数指的是作为整数的有效数字,我不知道除了在JVM上之外还有什么方法可以做到这一点,但是
java.lang.Math
java.lang.Double.doubleToLongBits
非常简单。这非常有用,但是我似乎无法正确解释它。如果我正确理解了规范,那么必须从指数中减去1023,但尾数对于大多数数字仍然不准确?例如,
5.0
的尾数是
1125899906842624
。我该怎么解释这件事?你也有把我送进兔子洞调查的危险。我现在没有时间进一步研究,但这是一个有趣的问题。如果你想进一步调查的话,下面是答案。