第十八章 ObjectScript 应用程序中的数值计算

2023-11-06  本文已影响0人  Cache技术分享

<center> 第十八章 ObjectScript 应用程序中的数值计算 </center>

介绍

IRIS 有两种不同的数字表示方式:

SQL 表示

SQL 数据类型 DOUBLEDOUBLE PRECISION 表示 IEEE 浮点数,即 $DOUBLESQL FLOAT 数据类型表示标准 IRIS 十进制数。

十进制格式

IRIS 在内部以两部分表示十进制数。第一个称为有效数字,第二个称为指数:

这是该值以 10 为底的指数。也就是说,数字的值是有效数乘以 10 的指数次方。

例如,对于 ObjectScript 文字值 1.23,有效数为 123-2 为指数。

因此,可以以 IRIS 本机格式表示的数字范围大约涵盖 1.0E-1289.22E145 的范围。 (第一个值是最小指数的最小整数。第二个值是显示的表示中小数点向左移动且指数相应增加的最大整数。)

所有18位精度的数字都可以准确表示;有效数表示范围内的数字可以准确地表示为 19 位数字。

注意:IRIS 不会对尾数进行标准化,除非需要以十进制格式拟合数字。因此,有效数为 123、指数为 1 的数字与有效数为 1230、指数为 0 的数字比较相等。

$DOUBLE 格式

$DOUBLE 格式符合 IEEE-754–2019,特别是 64 位二进制(双精度)表示形式。这意味着它由三个部分组成:

此表示形式具有 IRIS 本机格式所不具备的三个可选功能:

这些功能通过单个进程的 %SYSTEM.Process 类的 IEEEError() 方法或整个系统的 Config.Miscellaneous 类的 IEEEError()` 方法受程序控制。

重要信息:使用 IEEE 二进制浮点表示形式的计算对于相同的 IEEE 运算可能会给出不同的结果。 已经编写了自己的实现:

  1. $DOUBLE 二进制浮点数和十进制之间的转换;
  2. $DOUBLE 和数字字符串之间的转换;
  3. $DOUBLE 和其他数字类型之间的比较。

这保证了当 $DOUBLE 值插入 IRIS 数据库或从 IRIS 数据库中提取时,所有硬件平台的结果都是相同的。

但是,对于涉及 $DOUBLE 类型的所有其他计算,IRIS 使用供应商提供的浮点库子例程。这意味着同一组操作的平台之间可能存在细微差别。然而,在所有情况下,$DOUBLE 计算都等于对 C double 类型执行的本地计算;也就是说 $DOUBLE 计算平台之间的差异绝不会比在相同平台上运行的计算 IEEE 值的 C 程序所表现出的差异更严重。

上一篇 下一篇

猜你喜欢

热点阅读