实数类型

2019-01-14

实数类型


实数类型代表不同格式的浮点数。Single 类型占的字节数最小,为 4 个字节;其次是 Double 浮点类型,占 8 个字节;Extended 浮点类型,占 10 个字节。这些不同精度的浮点数据类型都与 IEEE( 电气和电子工程师协会)标准的浮点数表示法一致,并且 CPU 数字协处理器直接支持这些类型,处理速度也最快。

Real 类型在 Delphi 2 和 Delphi 3 中的定义与 16 位版本一样,都占 6 个字节。不过 Borland 公司一直不提倡使用这种类型,而建议用 Single、 Double、 Extended 类型代替。这是由于 Real 这种 6 字节的旧格式既不受 Intel CPU 的支持,又没有列在官方的 IEEE 实型中。为了完全解决这一问题,Delphi 4 不得不修改 Real 类型的定义,将其改成标准的 8 字节浮点型, 由此引起了兼容性问题,不过如果有必要,你可以采用下面编译指令克服兼容性问题,恢复 Delphi 2 和 Delphi 3 的Real 类型定义:

{$REALCOMPATIBILITY ON}

另外还有两种奇怪的数据类型:Comp 类型和 Currency 类型,Comp 类型用 8 个字节描述非常大的整数(这种类型可支持带有 18 位小数的数字);Currency 类型 (16 位版的Delphi不支持该类型) 表示一个有四位小数位的值,它的小数位长度是固定的,同Comp 类型一样也占 8 个字节。正如名字所示,Currency 数据类型是为了操作很精确的四位小数货币数值才添加的。

对实型数据,我们没办法编一个类似 Range 的程序,因为 High 、Low 及 Ord 函数不能用于实型值。理论上说实型类型代表一个无限的数字集合;有序类型代表一个有限的数字集合。

注意:让我进一步把上述问题解释一下。对于整数 23,你能确定 23 后面的数是什么 ,因为整型数是有限的,它们有确定的值域范围及排列顺序。而浮点数即使在一个很小的值域范围内也无限、无序。 事实上,在 23 和 24 之间有多少值? 哪个值是 23.46 后面的值? 23.47 还是 23.461,或者 23.4601? 这是很难说清的。

因此,如问 Char 类型字符 w 的顺序位置是有意义的, 但同样的问题对浮点类型数 7134.1562 就毫无意义。对于一个实型数,你能确切知道有没有比它大的实型数,但是,如想探究给定的实数前到底有多少个实型数(这是 Ord 函数的作用),是得不到结果的。

实型类型在用户界面编程中用得不多,但是 Delphi 从各方面支持实型类型,包括在数据库方面的支持。由于支持 IEEE 浮点数运算标准,Object Pascal 语言完全适合于各类数值计算编程。如果对这部分感兴趣,你可以参考 Delphi 在 System 单元中提供的算术函数(详细见 Delphi 帮助)。

注意:Delphi 带有一个 Math 单元,其中定义了一些高级数学例程,这些例程包括三角函数(如 ArcCosh 函数)、金融函数(如 InterestPayment 函数)和统计函数(如 MeanAndStdDev 过程)。 


阅读49