如何在Kotlin中使编译时间常量为NaN或POSITIVE_INFINITY?

Mar*_*dik 5 kotlin

我试过了:

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

const val inf = POSITIVE_INFINITY
const val nan = NaN
Run Code Online (Sandbox Code Playgroud)

但我得到:

Const'val'初始化器应该是一个常量值


编辑:

我需要这样做的原因是因为Junit5的参数化测试:

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

由于Java注释的一些限制(在本SO答案中描述),传递给注释的东西只能是编译时常量.因此,我需要编译时NaN,正数和负数无穷大.

hot*_*key 5

作为一种解决方法,您可以使用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
} 
Run Code Online (Sandbox Code Playgroud)