编程与类型系统
上QQ阅读APP看书,第一时间看更新

2.3 数值类型的常见陷阱

在多数编程语言中,通常会提供一种或多种基本类型来表示数字。使用数字时,有几点需要留意。以一个将购物价格加起来的简单函数为例。如果一个用户购买了3条泡泡糖,价格为每条10美分,则我们期望总价为30美分。但是,取决于使用数值类型的方式,我们有可能看到意外的结果,如程序清单2.7所示。

程序清单2.7 对物品价格求和的函数

为什么将0.10相加3次的结果不是0.30?为了理解这一点,我们需要了解计算机如何表示数值类型。数值类型的两个关键特征是其宽度和编码。

宽度是指用来表示一个值的位数。位数可以从8位(1个字节)甚至1位一直到64位或更多。位宽与底层芯片架构有很大关系:64位CPU有64位寄存器,所以允许对64位值执行极快的操作。对于编码给定宽度的数字,有3种常见的方法:无符号二进制、二进制补码以及IEEE 754。