为什么为什么Rust中只有浮点值才能够容纳几乎没有有效数字的大值,而整数却不能呢?
println!("{}", std::f64::MAX); // 1.7976931348623157e199
println!("{}", std::i64::MAX); // 9223372036854775807
如果我有一个整数,即99e100
在Rust中是否有任何原语可以将该值存储为整数,还是我被迫使用浮点数?
答案 0 :(得分:4)
锈原语是固定大小的。因此,它们可以存储有限数量的唯一值,不大于2 ^ n,其中n是类型中的位数。在整数类型的情况下,会将这些位模式分配给每个连续的整数,直到它们可以表示的值数量为止(从0开始)。此外,在有符号整数的情况下,这些模式的一半将分配给负数。
鉴于这些规格,i64
可以容纳的最大值为2 ^ 63-1(这是您打印的数字)。最大的有符号整数类型i128
最多可以容纳2 ^ 127-1。而且,如果您使用u128
,则可以达到2 ^ 128-1。这是Rust中原始整数类型可以容纳的最大值,比您要求的99e100小得多。
如果要使用更大的整数,则需要使用更大的固定大小类型或无限制类型,该类型会根据需要增长。这些都不是Rust标准的一部分。因此,您将不得不编写自己的实现,或使用其他人的实现,例如the num crate。