为什么编程语言不能提供一种基础的'decimal'类型"?

发布于 2021-03-19 09:28:04

如题,谢谢

查看更多

关注者
0
被浏览
189
1 个回答
lonewolfakela
lonewolfakela 2021-03-19

这个问题之所以不能实现,是有这样一个原因的:编程语言里的真正的“基础类型”,必须是能反映到 CPU 硬件指令上的类型;而 CPU 能做的指令都是有限的,一般来说,是要求基础类型的长度固定的:比如 float 就是 32 字节,double 就是 64 字节。那么 CPU 在执行一个比如“float 加法”的指令的时候,它能知道自己要做的事情实际上就是“读入两个 32 字节数据,送入一个浮点加法单元,这个单元在经过固定的时间长度之后就能得到结果,之后 CPU 就能进行后续计算”。
而对于你说的这种实际存储长度不定的数据,CPU 一来不能静态地确定每次需要读入 /写出的数据长度,二来也不能固定地知道每次例如加法乘法之类的操作需要运行多长时间。因此即使要在 CPU 上进行相关运算,也几乎必然会先被拆分成几个“子任务”进行计算:先要读入你说的那个 scale/precision 值,然后决定接下来读入多少位整数和小数,甚至可能还要进行一次额外计算来考虑数据计算单元计算一次加法要多少个时钟周期,以便安排接下来的指令。这样复杂的一个东西很显然是不适合作为一个“基础类型”存在的。这也是为啥现有大部分对这种 decimal 类型的实现都是用额外对象 /第三方库之类的东西。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览