如何在kotlin中访问双精度数的尾数和指数?
多平台选项将是理想的,但是Double类没有这样的方法/属性。
发布于 2020-11-24 21:19:35
Kotlin提供了toBits()函数,它只是JDK的doubleToLongBits()的包装器。您可以从doubleToLongBits的文档中看到
掩码位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规范对其进行转换。
发布于 2020-11-24 03:44:49
我建议所有编程语言的解决方案都是通用的:
val mantissa = doubleValue - doubleValue.toInt()
https://stackoverflow.com/questions/64974200
复制相似问题