如何在Kotlin中设置编译时常量NaN或POSITIVE_INFINITY?

mwngjboj  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(161)

我试探着:

import kotlin.Double.Companion.POSITIVE_INFINITY
import kotlin.Double.Companion.NaN

const val inf = POSITIVE_INFINITY
const val nan = NaN

但我得到:
Const '瓦尔'初始设定式应该是常数值
我需要这样做的原因是因为Junit5的参数化测试:

@ParameterizedTest
 @ValueSource(doubles = doubleArrayOf(nan, inf, -2* epsilon,  1.5, -0.5, 1.0 + 2* epsilon))
 fun ensureNotAProbability(number: Double)
 {
     ...
 }

由于Java注解的一些限制(在this SO answer中描述),“传递给注解”的内容只能是编译时常量。因此,我需要一个编译时NaN、正无穷大和负无穷大。

de90aj5v

de90aj5v1#

作为一种解决方法,您可以利用IEEE 754标准保证0.0 / 0.0为NaN且1.0 / 0.0为+∞这一事实:

@Suppress("DIVISION_BY_ZERO")
const val NAN: Double = 0.0 / 0.0

@Suppress("DIVISION_BY_ZERO")
const val INFINITY: Double = 1.0 / 0.0

fun main(args: Array<String>) {
    println(NAN) // NaN
    println(INFINITY) // Infinity
}

相关问题