Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么浮点数可以保存大的值和很少的有效数字,而整数不能?_Rust_Floating Point - Fatal编程技术网

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

Rust 为什么浮点数可以保存大的值和很少的有效数字,而整数不能?,rust,floating-point,Rust,Floating Point,为什么Rust中只有浮点值似乎能够保存大值,有效数字很少,而整数却不能 println!("{}", std::f64::MAX); // 1.7976931348623157e199 println!("{}", std::i64::MAX); // 9223372036854775807 如果我有一个整数,即99e100Rust中是否有任何原语可以将该值存储为整数,或者我是否被迫使用浮点?Rust原语的大小是固定的。因此,它们可以存储有限数量的唯一值,不超过2^n,其中n是类型中的位数。在

为什么Rust中只有浮点值似乎能够保存大值,有效数字很少,而整数却不能

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

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

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

根据这些规范,
i64
可以容纳的最大值为2^63-1(即您打印的数字)。最大有符号整数类型i128最多可容纳2^127-1的值。如果您使用
u128
,您可以一直得到2^128-1。这是Rust中基本整数类型可以容纳的最大值,大大低于您对99e100的请求


如果需要更大的整数,则需要使用更大的固定大小类型,或者使用根据需要增长的无界类型。这两项都不是防锈标准的一部分。因此,您必须编写自己的实现,或者使用其他人的实现,例如。

大整数需要什么精度?您只需要几个有效位,还是希望存储整数的所有数字?如果您只需要前者,那么浮点类型正是您想要使用的类型。在后一种情况下,您将需要一些任意精度的整数实现,如Benjamin Lindley的回答所述。即使是
f64
数字
99e100
也无法精确表示。它的确切值实际上是
9999999999996733616880411669127384953318580655547291796177947129584592172786260873968455469056