为什么Rust浮点值可以包含很少有效数字的大值,而整数不能?

问题描述 投票:-1回答:1

为什么只有Rust中的浮点值似乎能够容纳具有较少有效数字的大值,而整数不能?

println!("{}", std::f64::MAX); // 1.7976931348623157e199
println!("{}", std::i64::MAX); // 9223372036854775807

如果我有一个整数,即99e100在Rust中有任何原语可以将该值存储为整数,还是我被迫使用浮点数?

rust floating-point
1个回答
4
投票

Rust原语是固定大小的。因此,它们可以存储有限数量的唯一值,不大于2 ^ n,其中n是类型中的位数。在整数类型的情况下,这些位模式被分配给每个连续的整数,直到它们可以表示的值的数量,从0开始。此外,在有符号整数的情况下,这些模式的一半被分配给负数。

根据这些规范,i64可以容纳的最大值是2 ^ 63-1(这是您打印的数字)。最大的有符号整数类型i128,可以保存最大值2 ^ 127-1。如果你使用u128,你可以一直到2 ^ 128-1。这是原始整数类型在Rust中可以容纳的最大值,远远小于您对99e100的请求。

如果你想要更大的整数,你需要使用更大的固定大小类型,或者根据需要增长的无界类型。这些都不是Rust标准的一部分。因此,您必须编写自己的实现,或者使用别人的实现,例如the num crate

© www.soinside.com 2019 - 2024. All rights reserved.