此代码:

        let a = 1.00000003E-27f32;
        let b = 3.19291373E+17f32;
        println!("{:e} < {:e}", a/b, std::f32::MIN_POSITIVE);

产生以下结果:

3e-45 < 1.1754944e-38

首先,我认为是零,因为MIN_POSITIVE是最小的正数.那我已经读了大约subnormal numbers本了.那么,铁 rust 之所以打印这个结果,是因为它是一个不正常的数字吗?但是,为什么它不显示为一个不正常的数字呢?

推荐答案

为什么铁 rust 会产生比F32::Min_Positive小的F32?

因为MIN_POSITIVE不是个好名字.它不是最小正可表示数,而是最小正可表示正规数.有比它小的正的可表示值,称为次正态数.

那么,铁 rust 之所以打印这个结果,是因为它是一个不正常的数字吗?

a/b的计算结果是2.80259692864963414184745916657983226256052388375303154351413656777958216537172120297327637672424316•10−45.Ruust打印3e-45,因为这是对f32类型使用:e格式化2.80259692864963414184745916657983226256052388375303154351413656777958216537172120297327637672424316•10−45的结果.

但是,为什么它不显示为一个不正常的数字呢?

对于非正态数字,没有特殊的格式.它们是数字,格式类似于数字.(使用的位数可能受非正态数字的粗糙度的影响.也就是说,由于次正态数的相对间距较小,因此可能需要较少的数字来区分次正态数与其数字.)

Rust相关问答推荐

将大小为零的类型实例存储到空指针中

如何使用 list 在Rust for Windows中编译?

通过使用光标拖动角来绕其中心旋转矩形

通过解引用将值移出Box(以及它被脱糖到什么地方)?

不能在一个代码分支中具有不变的自身borrow ,而在另一个代码分支中具有可变的self borrow

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

为什么Deref类特征不构成?

借来的价值生命周期 不够长,不确定为什么它仍然是借来的

UnsafeCell:它如何通知 rustc Select 退出基于别名的优化?

为什么编译器看不到这个 `From` impl?

如何基于常量在Rust中跳过一个测试

Rust 中的方法调用有什么区别?

判断对象是 PyDatetime 还是 Pydate 的实例?

没有分号的返回表达式的性能是否比使用返回更好?在Rust ?

我如何将 google_gmail1::Gmail> 传递给线程生成?

从函数返回 u32 的数组/切片

Rust 内联 asm 中的向量寄存器:不能将 `Simd` 类型的值用于内联汇编

`if let` 只是另一种编写其他 `if` 语句的方式吗?

返回 &str 但不是 String 时,borrow 时间比预期长

守卫如何影响匹配语句?