我试过了:
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,正数和负数无穷大.
作为一种解决方法,您可以使用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)
归档时间: |
|
查看次数: |
478 次 |
最近记录: |