美文网首页
第十八章 ObjectScript 应用程序中的数值计算

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

作者: Cache技术分享 | 来源:发表于2023-11-06 08:53 被阅读0次

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

介绍

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

  • 其中第一个根源于 IRIS 的原始实现。这种表示形式将被称为十进制格式。

    在类定义中,当希望属性包含十进制格式数字时,可以数据类型类中使用 %Library.Decimal

  • 最近支持的第二种形式遵循 IEEE 二进制浮点算术标准(#754–2019)。在用于将数字转换为这种形式的 ObjectScript 函数 ($DOUBLE) 之后,后一种格式称为 $DOUBLE 格式。

    在类定义中,当希望属性包含 $DOUBLE 格式数字时,可以数据类型类中使用 %Library.Double

SQL 表示

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

十进制格式

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

  • 有效数包含数字的有效数字。它存储为带符号的 64 位整数,假定小数点位于值的右侧。在不损失精度的情况下可以表示的最大指数为 0 的正整数是 9,223,372,036,854,775,807;最大的负整数是-9,223,372,036,854,775,808
  • 指数在内部存储为有符号字节。其值范围为 127-128

这是该值以 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 位二进制(双精度)表示形式。这意味着它由三个部分组成:

  • 一个符号位

  • 11 位的两个指数次幂。指数值有 1023 的偏差,因此数字 $DOUBLE(1.0) 的指数内部值为 1023 而不是 0

  • 52 位小数有效数。由于尾数始终被视为正值并进行归一化,因此即使 1 位不存在于尾数中,也将假定其为前导二进制数字。因此,有效数的数字长度为 53 位:值 1,后跟隐含的二进制小数点,最后是小数有效数。可以将其视为隐式除以 2**52 的整数。

    作为整数,可以精确表示 09,007,199,254,740,992 之间的所有值。较大的整数可能有也可能没有精确的表示,具体取决于它们的位模式。

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

  • 能够将无效计算(例如取负数的平方根)的结果表示为 NaN(非任何数字)。
  • 能够同时表示 +0-0
  • 代表无穷的能力。
  • 该标准规定了小于 2 ** -1022 的数字的表示。这是通过一种称为逐渐损失精度的技术来完成的。

这些功能通过单个进程的 %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 程序所表现出的差异更严重。

相关文章

  • 第八章 使用嵌入式 Python (五)

    第八章 使用嵌入式 Python (五) 通过引用传递参数 用 ObjectScript 编写的方法中的参数可以通...

  • Excel小技巧:表格中带单位的数值如何计算?

    Excel表格带单位的数值如何计算?我们在计算Excel表格里面的数值时,要是发现Excel表格中需要计算的数值都...

  • Python-Scipy进行数值积分

    Python的Scipy模块中拥有大量的数值计算函数,方便我们快速进行数值计算。 Scipy中的integrate...

  • Android中数值的精确计算

    Android中数值计算的精度 在平常的开发中,会经常进行数值的计算,而如何才能更加准确的得到计算结果是最重要的,...

  • 深度学习中的数值计算

    本文首发自公众号:RAIS 前言 本系列文章为《Deep Learning》读书笔记,可以参看原书一起阅读,效果更...

  • 十月五号

    、数据 数据指的是能输入到计算机中,并能被计算机程序处理的对象。 对于数值类型(整型、实型等),可以进行数值计算;...

  • 数值计算

    这周组会的内容涉及到数值计算的结果。 老师说,我们一定要进行无量纲化,才能带入公式中进行计算。 这样的结果才算是基...

  • 第八章 SQL修改数据库

    第八章 SQL修改数据库 可以对现有的表使用SQL语句,也可以对相应的持久化类使用ObjectScript操作来修...

  • Java工程师之Oracle技术-SQL入门(2)

    分组计算函数和GROUP BY字句 常用分组计算函数 SUM(列) 数值类型,计算和 AVG(列) 数值类型,计算...

  • 花书第四章笔记

    @[toc] 第四章 数值计算 掌握深度学习中所需要的数值计算相关知识 数值计算[p72-p85] 4.1 上溢和...

网友评论

      本文标题:第十八章 ObjectScript 应用程序中的数值计算

      本文链接:https://www.haomeiwen.com/subject/idbtwdtx.html