DEV Community

drake
drake

Posted on • Updated on

Rust 有点变态的 "精致细腻"(浮点数为例)

  • 相对于Python而言,rust在语法上很多地方真是变态的调戏,精细讲究,很多时候感觉没有必要;用惯了Python 再与Rust对比,Python真的是太粗犷的,粗犷到不忍直视,Rust是精细到变态,不忍直视;

  • 这里就举个浮点数的例子吧,以人类视角是完全没毛病的代码,Python也是完全没毛病的,rust这里却是个bug;

fn main() {
  // 断言0.1 + 0.2与0.3相等
  assert!(0.1 + 0.2 == 0.3);
}
Enter fullscreen mode Exit fullscreen mode

这段代码就是有毛病的,会报错: panicked ; 问题的点是与人类交互的数字(浮点数)是对计算机底层的具象化近似表达,并不精确;也就是说为了和人类更好的交互,这里只是取了一个近似值;这只是表象,不是本质,表象甚至是错的(严格意义来说);这种表象只是为了迁就人类更好的理解,不要被表象迷惑了;如果有一天编程不再需要人参与,那一定会诞生一门新语言,这么语言会直达本质,不会为了迁就人类在计算机底层的基础上再包一层,这是很低效的;就是中国人的说话艺术,人情世故,弯弯绕,这是很低效的;

  • 书写出来的浮点数会指向一个内存地址,但是该内存地址是以二进制的方式存储的,Rust编译器不会翻译;比如上面的0.1+0.2==0.3;0.1代表的二进制数据并不是0.1,0.2代表的二进制数据精确算出来也不是0.2;那么这两个相加得到的二进制数据和0.3所代表的二进制数据一定不一样;

  • 所以Rust很精细,很较真,更偏向于计算机,更偏向于底层,而不是开发人员;这与Python的设计理念真是截然相反

Top comments (0)