我认为传统上,所有退化的浮点数都被称为“NaN”,但Rust似乎区分三种类型的退化浮点数:+inf、-inf和nan(这就是为什么我在标题中使用“非有限”而不是“nan”或“无穷大”的原因)。
当你尝试将它们转换为整数,比如u64时,会发生什么?是否有定义行为?如果有,那么定义行为是什么?
我认为这是未定义的。7年前reddit上的一个帖子说它是未定义的,但事情可能已经改变了。
在“Rust示例”中,似乎说nan会被转换为0。
根据我的实验,它在实践中不会崩溃,因此除非编译器存在明显的错误,否则我认为行为不被定义为“panics”。
float_to_int_unchecked
,该函数在内部使用了 llvm 的 fptoui。所以它肯定不会出现 panic,但我不知道它还做了什么。顺便问一下,为什么不链接那个七年前的 Reddit 帖子呢? - Caesar