既然浮点数据类型不精确,那么浮点数存在的意义在哪?

2021-03-18 14:20:45 +08:00
 xiaokongwu

既然二进制无法精确的表示小数,那么为什么设计浮点数(float/double)这种不精确的格式,而不直接设计一种基础的,可以精确表示小数的基础数据类型呢?

IEEE 虽然规定了浮点数的格式,但这种浮点数格式仍然是不精确的,为什么不直接规定一种精确的存储格式呢? 比如整数小数分开存储,前 N 位是整数,后 N 位是小数,再来几位存 scale/precision 之类的设计,就像 Java 里的 BigDecimal 一样

9823 次点击
所在节点    Java
83 条回复
secondwtq
2021-03-20 16:15:58 +08:00
既然人类个个都是傻 x,那么人类存在的意义在哪?
secondwtq
2021-03-20 18:11:05 +08:00
所谓“择其善者而从之,其不善者而改之”,就算是“不好”的东西,也是有存在的价值的。
何况在计算机的世界里,并不存在绝对的“不好”。类似的问题还有:“既然硬盘这么慢,那么硬盘存在的意义在哪?”,“既然 MP3 音质有损失,那么 MP3 存在的意义在哪?”,“既然 Java 不如 PHP 好用,那么 PHP 存在的意义在哪?”,“既然 64 位浮点数比 32 位浮点数精确,那么 32 位浮点数存在的意义在哪?”“既然我们前端要 UTF-8 Everywhere,那么 GB 18030 存在的意义在哪?”“既然 memory_order_seq_cst 那么好用,那么 memory_order_relaxed 存在的意义在哪?”

都是课本里面讲烂的东西,在这帖子里面重复的意义在哪?
不如整点新活,比如 FP Lives Matter!!!!!1111
xiaokongwu
2021-03-21 16:26:08 +08:00
@touchwithe 哈哈哈,终于来了个明白的大哥,没想到有这么多人回复,有怼我垃圾没基础的,也有很多热心解答的。我这问题的关键不在那些无限小数,而是一些有限位的小数,但二进制不能精确表示的那些,为啥不弄一种类似 BigDecimal 的基础类型来实现(看完了评论区,大概了解了,除了存储还有运行效率,CPU 支持浮点数的运算,如果弄复杂类型就效率低了)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/762814

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX