gpt4 book ai didi

kotlin - 如何在 Kotlin 中制作编译时间常数 NaN 或 POSITIVE_INFINITY?

转载 作者:IT老高 更新时间:2023-10-28 13:47:28 27 4
gpt4 key购买 nike

我试过了:

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

const val inf = POSITIVE_INFINITY
const val nan = NaN

但我明白了:

Const 'val' initializer should be a constant value


编辑:

我需要这样做的原因是Junit5's parametrized tests :

 @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、正无穷和负无穷。

最佳答案

作为一种解决方法,您可以使用 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
}

关于kotlin - 如何在 Kotlin 中制作编译时间常数 NaN 或 POSITIVE_INFINITY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46565769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com