2023信息技术微处理器系统浮点运算_第1页
2023信息技术微处理器系统浮点运算_第2页
2023信息技术微处理器系统浮点运算_第3页
2023信息技术微处理器系统浮点运算_第4页
2023信息技术微处理器系统浮点运算_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息技术微处理器系统浮点运算PAGE\*ROMANPAGE\*ROMANIIIPAGE\*ROMANPAGE\*ROMANII目  次前  言 III引  言 IV总述 5范围 5实现目标 5包含 5不包含 5编程环境考虑 5规范性引用文件 6术语、定义和缩略语 6术语和定义 6缩略语 12浮点格式 124.1概述 12规范等级 12浮点数据集 13二进制交换格式编码 14十进制交换格式编码 15交换格式参数 18扩展和可扩展精度 19属性与舍入 19属性规范 19属性的动态模式 20舍入方向的属性 206操作 216.1概述 21十进制阶码计算 22同构通用计算操作 23通用计算操作的格式 24静默计算操作 26信号计算操作 27非计算操作 27浮点格式到整数格式转化的详细说明 29将浮点数据舍入为整数值的细节 30全序谓词的详细说明 30对比谓词的详细说明 31浮点数据和外部字符序列之间转换的详细说明 32无穷、NaNs和符号位 35无穷运算 35使用NaN操作 36符号位 37异常和默认异常的处理 37概述:异常和旗标 37无效操作 38被零除 398.4上溢 398.5下溢 398.6不精确 39备用异常处理属性 409.1概述 40恢复备用异常处理属性 40即时和延迟的备用异常处理属性 41建议操作 4110.1概述 41符合语言定义和实现定义的操作 42动态模式操作 47归约操作 48增强算数操作 49最小值和最大值操作 51NaN有效载荷操作 51表达式评价 52表达式评价规则 52任务、参数和函数值 52对于表达式求值的首选宽度属性 53字面含义和值变化的优化 53可复现的浮点运算结果 54附录A(资料性)参考文献 56附录B(资料性)程序调试支持 59概述 59数值灵敏度 59数值异常 59编程错误 59附录C(资料性)操作列表 61前  言本文件按照GB/T1.1—2020《标准化工作导则第1部分:标准化文件的结构和起草规则》的规定起草。本文件代替GB/T17966—2000《微处理器系统的二进制浮点运算》。与GB/T17966—2000相比,除结构调整和编辑性改动外,主要技术变化如下:a)增加了范围中对浮点运算编程环境注意事项的描述(见1.5);b)增加了二进制与十进制的交换格式编码内容(见第5章);更新了舍入的具体规定,增加了舍入方向的属性描述以及舍入的动态属性(6.1、6.2、6.3);增加了浮点运算多种操作的规定,包括二进制与十进制的格式转化、阶码计算、静默计算、信令计算、非计算操作的内容(7.2、7.5、7.6、7.7);增加了常规异常处理中异常和旗标的描述(9.1);更新了对引发自陷的若干异常情况规定(10.2、10.3);增加了浮点运算的若干建议操作及表达式估值(1112)。本文件等同采用ISO/IEC60559:2020《信息技术微处理器系统浮点运算》。与ISO/IEC60559:2020相比,本文件做了如下允许的结构调整和编辑性改动:——增加了“规范性引用文件”一章;——本文件的第3章对应ISO/IEC60559:2020中的第2章、第4章对应ISO/IEC60559:2020中的第2.2条,后续章条编号同理顺延;——删除了附录D(资料性)“IEEE参与者名单”。本文件由全国信息技术标准化技术委员会(SAC/TC28)提出并归口。本文件起草单位:本文件主要起草人:本文件及其所代替文件的历次版本发布情况为:——2000年首次发布为GB/T17966—2000,本次为第一次修订。引  言本文件提供了执行浮点运算的规则,其产生的结果与完成该操作的硬件、软件,或软硬件组合无关。对于本文件规范部分规定的操作,数值结果和异常由输入数据、操作和目标的值唯一确定,均由用户控制。本文件定义了一种可以系统商业化的二进制与十进制的浮点运算。其中本文件所满足的需求包括:促进现有程序从其他类型的计算机以及部分符合本文件的计算机迁移到完全符合本文件的计算机。增强在数值法方面非专业的用户和程序员在编写复杂的数值程序时的兼容性和安全性。鼓励专家开发稳定和高效的数值程序,这些程序可以通过简单的编辑和重新编译的方式移植到任何符合本文件并具有足够容量的计算机上。结合语言控制,实现所有符合标准的系统上的程序产生相同结果。为以下情况提供直接支持:执行时间异常诊断;更顺畅地处理异常;以合理的成本执行区间算法。为以下情况提供发展条件:常见的基本函数,如exp或cos;高精度(多字符)运算;耦合数值和符号代数计算。允许而不是排除进一步的优化和扩展。在编程环境中,本文件也将成为数学界和编程语言设计者之间对话的基础。人们希望在未来几年能够推出可以控制表达式计算与异常结果的编程语言,以便可以编写运行在所有符合标准的系统上并产生相同结果的程序。然而,人们意识到,在编程语言中实用性和安全性有时是对立的,就像效率和可移植性也是如此。因此,希望编程语言设计者将本文件框架所描述的全套操作、精度和异常控制,作为为程序员提供可移植地控制表达式和异常的能力的指南。同样也希望编程语言设计者能在本文件的框架下,以一种完全可移植的方式提供扩展。附录A提出了用于调试支持的编程环境功能。PAGEPAGE11PAGEPAGE10信息技术微处理器系统浮点运算总述范围本文件规定了计算机系统浮点运算的格式和运行要求,定义了浮点运算的异常条件并规定了其处理要求。实现目标本文件给出了一种使用浮点数进行计算的方法,该方法无论是在硬件、软件还是两者的组合中进行处理,都会产生相同的结果。其计算结果是基于同一输入数据,相同的,且与实现无关。不论实现的情况如何,运算处理中的错误和错误条件都将以一致的方式报告。包含本文件规定了计算机系统中浮点运算的格式和操作。本文件定义了异常条件并指定了对这些条件的处理。本文件规定了:——用于运算和数据交换的二进制和十进制浮点数格式;——加、减、乘、除、开平方、求余数、比较及其他操作;——整数与浮点数之间的转换;——不同浮点格式之间的转换;——浮点格式与外部字符串之间的转换;——浮点异常及其处理,包括非数(NaN)的处理。不包含本文件不规定:——整数格式;——非数(NaN)符号和有效字段的解释。编程环境考虑本文件规定了二进制和十进制两种基数的浮点运算。编程环境符合其中任一或两者均符合。本文件未定义一致性编程环境的所有方面。这样的行为应由支持本文件的编程语言(如果可用)定义,或由具体实现进行定义。语言定义的行为由支持本文件的编程语言标准定义。所有实现遵从于本文件以及与语言定义的行为一致的编程语言标准。相比于最大限度地提高平台性能,语言标准对准确地再现结果规定了更详尽的要求。因为本文件对目前通用编程语言中没有的设施给出了要求,未修订的相关编程语言标准可能无法符合本文件的规定。如果语言可以通过函数库或类或包扩展提供一个一致的环境,那么该扩展应定义所有通常由语言标准来定义的语言定义的行为。实现定义的行为由符合本文件特定编程环境的实现定义。实现定义的行为不由本文件规定,也不受任何相关编程语言标准或编程语言扩展的限制。符合本文件是特定编程环境的特性,而不是语言规范的特性。规范性引用文件本文件没有规范性引用文件。术语、定义和缩略语术语和定义下列术语和定义适用于本文件。3.1.1运算格式arithmeticformat用于表示浮点操作的操作数或结果的一种浮点格式。3.1.2属性attribute浮点运算操作的隐含参数,用户可以通过指定恒定值静态设置为编程语言。术语“属性”可以引用参数(如“目标性舍入”)或其值(如“舍入趋零性”)。3.1.3基本格式basicformat本文件指定的用于浮点运算的五种浮点表示之一。在任何符合性实施中都会实现一个或多个基本格式。3.1.4有偏阶码biasedexponent阶码与固定常数(偏移值)之和,所选常数使有偏阶码不出现负值。3.1.5二进制浮点数binaryfloating-pointnumber基数为2的浮点数。3.1.6块block用户可以为其指定属性的一种语言定义的语法单元。语言标准可能为用户提供各种范围块(大到整个程序,小到一个操作)指定属性的手段。3.1.7规范编码canonicalencoding浮点表示形式的首选编码格式。“规范编码”也适用于小数,有限数量的有效数,无穷大和NaN,尤其是十进制格式。3.1.8队列cohort以给定浮点格式表示给定浮点数的所有浮点表示形式的集合。在这种情况下,−0和+0被认为是不同的,并且处于不同的队列中。3.1.9计算操作computationaloperation产生浮点结果或可能表示浮点异常的操作。计算操作通过在必要时将浮点或其他目的地格式舍入以适应生成结果。3.1.10正确舍入correctrounding基于适用的舍入方向,浮点运算中将无限精确的结果转换为浮点数的方法。这样得到的浮点数被认为是正确舍入的。3.1.11十进制浮点数decimalfloating-pointnumber基数为10的浮点数。3.1.12十进位declet使用密集十进制编码方案将三位十进制数字编码成十位的一种编码方式。计算操作接受操作数中所有1024个可能的解码。大多数计算操作仅产生1000个规范十进位。3.1.13反规格化数denormalizednumber见3.52非正规数。3.1.14目的地destination在一个或多个操作数上进行操作的结果位置。目的地由用户显式地指定或者由系统隐式地提供(如各过程的子表达式或自变量的中间结果)。虽然一些语言把中间结果放置在用户不能控制的目的地中,但本文件仍然按照目的地格式以及操作数的值来定义操作结果。3.1.15动态模式dynamicmode一种可选的动态设置属性方法,通过本文件的操作来设置、测试、保存和恢复属性。3.1.16异常exception当某些特定操作数上的操作没有适合每种合理应用的结果时发生的事件。该操作可能会通过调用默认异常处理或备用异常处理来发出异常信号。异常处理可能会发出进一步的异常信号。需要注意事件、异常和信号在不同的编程环境中以不同的方式定义。3.1.17阶码exponent有限浮点数的组成部分,在确定浮点数所代表的数值时,将基数提高到整数幂。将有效数看作整数和分数域时,使用阶码e;将有效数看作整数时,使用阶码q;e=q+p-1,其中p为数字格式的精度。3.1.18可扩展精度格式extendableprecisionformat在用户控制下定义的具有精度和范围的格式。3.1.19扩展精度格式extendedprecisionformat通过提供更广泛的精度和范围来扩展受支持的基本格式的格式。3.1.20外部字符序列externalcharactersequence将浮点数据表示为字符序列的一种方法,包括程序文本中浮点字符的字符序列。3.1.21旗标flag状态旗标(见3.49)。3.1.22浮点数据floating-pointdatum可用浮点格式表示的浮点数或NaN。浮点运算中浮点数据并不总是从其表示或编码进行区分。3.1.23浮点数floating-pointnumber可用浮点格式表示的有限数或无穷数。不是NaN的浮点数据。所有浮点数(包括0和无穷)都是有符号的。3.1.24浮点操作floating-pointoperation操作数或结果为浮点数据的操作。3.1.25浮点表示floating-pointrepresentation浮点格式的未编码成员,表示有限数、有符号无穷大、qNaN或sNaN。有限数的表示有三个部分:符号、阶码和有效数;它的数值是其有效数和基数的阶码次幂的有符号乘积。3.1.26格式format一组数值和符号的表示形式,可能附带编码。3.1.27融合乘加fusedMultiplyAdd运用fusedMultiplyAdd(x,y,z)操作计算(x×y)+z似乎具有无限范围和精度,只对目的地格式四舍五入一次。3.1.28通用操作genericoperation浮点运算的一种操作,可以采用各种格式的运算,其结果的格式可能取决于运算的格式。3.1.29齐次操作homogeneousoperation浮点运算的一种操作,它接受运算并以相同的格式返回结果。3.1.30实现定义implementation-defined由符合本文件的特定编程环境的特定实现定义的行为。3.1.31整数格式integerformat浮点运算中的一种格式,它表示整数的子集,也可能表示无穷大、NaN或负0的附加值。3.1.32交换格式interchangeformat浮点运算中定义的特定固定宽度编码的格式。3.1.33语言定义language-defined由支持本文件的编程语言标准定义的行为。3.1.34非数NaN不是一个数,而是用浮点格式编码的符号实体。NaN有两种类型:qNaN和sNaN。qNaN通过大多数操作进行传播时不产生信号异常,sNaN作为操作数时会产生无效操作异常信号。3.1.35较窄/较宽格式narrower/widerformat如果一种格式的浮点数集是另一种格式的真子集,则第一种格式称为较窄格式,第二种格式称为较宽格式。较宽的格式可能具有更高的精度、范围或(通常)兼有。3.1.36非计算性操作non-computationaloperation一种非计算性的操作。3.1.37正规数normalnumber对于特定格式,是一个有限的非零浮点数,其大于或等于最小�emin值,其中b以使用格式中可用的全精度。在本文件中,0既不是正规数,也不是非正规数。3.1.38操作operation对零个或多个运算值进行运算并产生结果或副作用(如动态模式或标志或控制流的更改,或两者兼有)的必需操作和推荐操作。此处,操作被编写为命名函数;在特定的编程环境中,它们可能由运算符、特定于格式的函数族或名称可能与本文件中不同的操作或函数来表示。3.1.39有效载荷payloadNaN中包含的可能具有诊断性的信息。3.1.40精度precision可以用格式表示的最大有效位数p,或将结果四舍五入到的位数。3.1.41首选阶码preferredexponent对于十进制操作的结果,当结果准确时,最能反映运算量的阶码q值。3.1.42首选宽度方法preferredWidthmethod一种由编程语言用来确定通用操作和函数的目的地格式的方法。一些首选宽度方法利用了宽格式的额外范围和精度,而无需使用显式转换编写程序。3.1.43量值quantum一个单位在其有效位的最后位置的值。这等于将有效位视为整数时使用的阶码q的基数。3.1.44静默操作quietoperation一种从不发出任何浮点异常信号的操作。3.1.45基数radix表示二进制或十进制浮点数(2或10)的基数。3.1.46结果result传递到目的地的浮点表示形式或编码。3.1.47信号signal某些特定运算符上的操作没有适用于每个合理应用程序的结果时,该操作可能会通过调用默认处理来发出一个或多个异常信号,或者,如果有明确要求,则调用用户选择的语言定义的替代处理。3.1.48有效数significand包含有效数字的有限浮点数的组成部分。通过选择适当的阶码偏移量,有效位数可以被视为整数,分数或其他定点形式。十进制或次正规二进制有效数也可以包含前导零,而前导零不是有效数。3.1.49状态旗标statusflag可采取设置和清除两种状态的变量。用户可以对先前状态清除、拷贝或者恢复旗标。当为设置状态时,状态旗标可含有某些用户可能无法访问的系统相关的附加信息。作为某一方面的作用,浮点运算的操作可以设置部分下列状态旗标:无效操作、下溢、上溢、被零除以及不精确。3.1.50非正规数subnormalnumber在特定格式中,一种数值小于该格式的最小正态数的非零浮点数。非正规数不使用相同格式的正规数可用的全精度。3.1.51支持格式supportedformat编程环境中提供的符合本文件要求的浮点格式。因此,编程环境提供的格式可能比它的支持格式多,因为只有那些根据标准实现的格式才能得到支持。此外,如果整数格式与支持的浮点格式之间的转换符合此标准,则称为支持该格式。3.1.52尾随字段trailingsignificandfield编码的二进制或十进制浮点格式的组成部分,包含除前导数字以外的所有有效数。在这些格式中,有偏阶码或组合字段对前导数字进行编码或暗示。3.1.53用户user可以访问和控制本文件规定的程序设计环境操作的任何个人、硬件或程序(本文件未规定)。3.1.54操作宽度widthofanoperation本文件规定的操作目的地的格式,是符合浮点运算实现提供的受支持格式之一。缩略语下列缩略语适用于本文件。LSB 最低有效位(LeastSignificantBit)MSB 最高有效位(MostSignificantBit)NaN 非数(NotaNumber)qNaN 静默非数(quietNaN)sNaN 信号非数(signaling浮点格式格式本章定义了浮点格式,用于表示实数的有限子集(见5.2)。格式以基数、精度和阶码范围为特征,每种格式都表示一组唯一的浮点数据(见5.3)。所有格式都支持运算格式;即,它们可用于表示本文件后面章节中描述的操作的浮点操作数或结果。本章中也定义了固定宽度二进制和十进制格式的编码(见5.4和5.5)。这些交换格式按其长度确定(见5.6),用于实现浮动点数据交换。本章定义了五种基本格式:——三种二进制格式,编码长度为32位、64位和128位;——两种十进制格式,编码长度为64位和128位。推荐使用其他运算格式来扩展这些基本格式(见5.7)。本文件中支持哪些格式由语言定义,如果相关语言标准没有说明或依赖于实现,则由实现定义。本文件中使用的格式名称不一定是编程环境中使用的名称。一致性任何受支持格式的一致性实现应提供初始化该格式的方法,并应提供该格式与所有其他受支持格式之间的转换。受支持的运算格式的一致性实现应为该格式提供本文件第7章中定义的所有操作。受支持的交换格式的一致性实现应为使用本章定义的特定编码的格式提供读写该格式的方法。在特定基数下,运算实现一个或多个同时支持运算格式与交换格式基数的基本格式,该编程环境符合本文件。规范等级浮点运算是近似于实数运算的运算系统,如表1所示。浮点运算只能表示连续实数的一个有限子集。因此对于实数运算的某些属性(如加法结合律),并不总是适用于浮点运算。表1特定格式的不同规范等级之间的关系等级子集范围数据格式等级1{-∞…0…+∞}扩展实数多对一↓舍入↑映射(除了NaN)等级2{-∞…-0}⋃{+0…+∞}⋃NaN浮点数据——代数封闭系统一对多↓规范化表示↑多对一等级3(符号,阶码,绝对值)⋃{-∞,+∞}⋃qNaN⋃sNaN浮点数的表示一对多↓浮点数据的编码形式↑多对一等级40111000…位字符串在本文件中,支撑算术的数学结构是扩展实数,即实数集以及正负无穷的集合。对于给定的格式,舍入过程(见第6章)将扩展的实数映射到该格式中的浮点数。浮点数据可以是带符号的零,有限的非零数字,带符号的无穷数或NaN,可以以一种格式映射到一个或多个浮点数据中。浮点数据的格式包括:——三元组(符号sign,阶码exponent,绝对值significand);对于基数b,用三元组表示的浮点数为−1𝑠𝑖×�𝑒𝑥�𝑖�×𝑠𝑖����𝑖�——+∞,-∞;——qNaN,sNaN。编码将浮点数据的表示形式映射到字节字符串。编码可能会将浮点数据的某些表示形式映射到多个字节字符串。NaN编码被用来存储回溯诊断信息(见8.2)。浮点数据集本条规定了可表示在所有浮点格式中的浮点数据集;在5.4和5.5中定义了交换格式中浮点数据的特定表示形式的编码,在5.6中定义了交换格式的参数。在特定格式中可表示的有限浮点数集由以下整数参数决定:——b:基数,2或10;——p:有效位数(精度);——emaxe;——emine。对于所有格式,emin应为1-emax。表1给出了每种基本格式的参数值,其中每种格式均通过其基数和编码位数来标识。表2中给出了对扩展精度格式和可扩展精度格式的参数的约束。在每种格式中,应表示以下浮点数据:——有符号的零和非零的浮点数格式为−1�×��×�,其中,01;是任意整数,emin≤e≤emax;是一个数字,由以下形式的数字字符串表示:d0·d1d2⋯dp−1,其中,di是满足0≤di<b的整数(因此0≤m<b)——两种无穷,+∞和-∞;——NaN,qNaNsNaN这些是浮点数据的唯一表示。在前面的描述中,有效位数m是用科学计数形式表示的,其小数点紧跟在第一个有效数字之后。出于某些目的,将有效数字视为整数也很方便;在这种情况下,有限浮点数的描述如下:——有符号的零和非零的浮点数格式为−1�×��×�,其中,s01;qemin≤q+p-1≤emax;cd0·d1d2⋯dp−1,其中,di是满足0≤di<b的整数(c是满足0≤c<bp的整数)。c,以科学形式描述了完全相同的零和非零浮点数集。(对于有限浮点数,�=�+�1且�=�1−�)。最小正的正规浮点数是�emin,最大的是���𝑒×对值小于�emin比p����×�−�。对于值为0提供了额外的信息。尽管所有格式对+0和-0都有不同的表示,但0的符号在某些情况下很重要,如被零除,但在其他情况下则不然(见8.3)。对于+0和−0,二进制交换格式只有一种表示,但是十进制格式有很多。在本文件中,当符号不重要时,写入0和∞时不带符号。表2定义基本格式浮点数的参数参数二进制格式(b=2)十进制格式(b=10)二进制32位二进制64位二进制128位十进制64位十进制128位数值P24531131634emax+127+1023+16383+384+6144二进制交换格式编码每个浮点数只有一种二进制交换格式的编码。为了使编码具有唯一性,对于5.3中的参数,通过减e=m<k位字节的编码表示,如图1所示,由以下三个域依次构成:1bit(��1)bit��0�1�2⋯��−1,有效数的前导字节�0E中。1二进制交换浮点格式参数和bias如表5所示(见5.6)。编码的有偏阶码E的范围应包括:——包含在[1,2�−2]的每个整数,用于编码正规数;——保留值0,用于编码±0和非正规数;——保留值2�−1,用于编码±∞和NaNs。浮点数据的表示形式r和浮点数据的值v,从组合字段中推断如下:若�=2�−1且�≠0rqNaNsNaN,vSNaN,�1sNaN(8.2.1);b)若�=2�−1且�=0−1s×(+∞);c)−2r为21−p×T));对应浮点数的值为v=(−1)S×2E−bias×(1+21−p×T)1;d)若�=0且�≠0,则r为(S,emin,(0+21−p×T));对应浮点数的值为v=(−1)S×2emin×(0+21−p×T);因此,非正规数的隐式前导有效字节为0;e)若�=0且�=0为v=(−1)S×+08.3)。NaN注:当k是64或是32且≥128的整数倍时,以下所有为真(其中round()舍入到最接近的整数):�=1+�+�=�+�=32×����+��4×o2�+��4�∗og�)−1)−1/32�=�−�−1=�−�=𝑥𝑖�(4×log2(�))−13�=�−�−1=�−1=�−𝑥𝑖�(4×log2�+12�=�−�=�+1=�−𝑥𝑖�(4×log2(�))+13��𝑒=𝑠��=2(�−1)−1���=1−���=2−2−1)十进制交换格式编码队列与二进制浮点格式不同,在十进制浮点格式中,数字可能具有多种表示形式。浮点数映射到的表是10小于其最大在数值上相等时,可以通过特定于十进制的操作来区分数组的不同成员(见7.3.2、7.5.2和7.7.3)。不同浮点数的队列可能具有不同的成员数。如果一个有限非零数的表示中有n个十进制是格式中的精确位数。如一位浮点数可能有多达p个不同的表示形式,而没有后缀为零的p位浮点数只能具有一个表示形式。(如果n位浮点数接近该格式阶码范围的极限,则其队列中的成员可能少于。0代表一个更大的队列:+0的队列包含每个阶码的表示,−0的队列也是如此。对于十进制运算,除了指定数值结果外,算术操作还根据7.2选择结果队列中的成员。十进制应用程序能利用队列传递的附加信息。编码浮点数的十进制交换形式由k位字节的编码表示,具体布局和规范(首选)编码如下:1bitS;bitG编码分类,如果编码的数据为有限数,则为阶码q4节(13)Eq的偏置,其中有偏阶码0、12。tbit=3�12。图2十进制交换浮点格式参数和bias如表6所示(见5.6)。浮点数据的表示形式r和浮点基准的表示值v,从组合字段中推断如下:若�0至�411111vNaNS。此外,若�51rsNaNrqNaNNaN。G0对应于有限数的有效位数,有效载荷对应于有限数字的有效位,解释为最大值为10^((3×J))-10)。如果位�6到��+4为零,且有效载NaN(规范)编码。若�0至�411110r和�=(−1)S(∞)GT中剩余位的值。两个无穷大的规范编码的位分别是�5到��+4=0和�=0。对于有限数,r为(,�−���,�)且v=(−)S×(Ebas)×C,其中,C是前导有效数字或GTEw�5到��+4。有偏码的两个最高有效位和有效数的十进制数字串�0�1�2⋯��−1由位�0至�4和T构成,所示:110xx1110x�08�4892�2�30、12G10xxx�0为4�22�3�407位为2�0+�10、12T0G500000、0100010000v=(−1)S×(0)。当�−1=3×�十进制数�1⋯��−1由T编码,T包含以密集十进制编码的J个十进制小341024个可能的十进制数。除了静态计算操作(7.5)外,计算操作只产生1000如果实现使用有效数字的二进制编码,则:如果�0和�100、0110由�0到��+1形成,有效位由位��+2到编码结束(形成。如果�0和�111,且�2和�300、01E由�2到��+34(8+��+4)T形成。GB/T17966—XXXX/ISO/IEC60559:2020二进制编码的有效位的最大值与对应的十进制编码的有效位的最大值相同,即10(3×J+1)−1(或将T用作NaN的有效载荷时为10(3×J)−1)。如果该值超过最大值,则有效值c为非规范值,且c的值为零。计算操作通常只产生规范有效数,并且始终接受操作数中的非规范有效数。注:当k是32的正倍数,对于这些编码,下列所有条件均成立:k=1+5+w+t=32×celing((p+2)/9)�=�−�−6=�/16+4�=�−�−6=15×�/16−10�=3×�/10+1=9×�/32−2��𝑒=3×2(�−1)���=1−���𝑠��=��𝑒+�−2解码密集十进制:表3将10位字节�(0)至�(9)的十进制解码为3个十进制数字�(1),�(2),�(3)1024个可能的10位字节项,并映射成1000个可能含冗余码的3位组合。3103�(6),�(7),�(8),�(3),�(4)�(1)�(2)�(3)0xxxx4�(0)+2�(1)+�(2)4�(3)+2�(4)+�(5)4�(7)+2�(8)+�(9)100xx4�(0)+2�(1)+�(2)4�(3)+2�(4)+�(5)8+�(9)101xx4�(0)+2�(1)+�(2)8+�(5)4�(3)+2�(4)+�(9)110xx8+�(2)4�(3)+2�(4)+�(5)4�(0)+2�(1)+�(9)111008+�(2)8+�(5)4�(0)+2�(1)+�(9)111018+�(2)4�(0)+2�(1)+�(5)8+�(9)111104�(0)+2�(1)+�(2)8+�(5)8+�(9)111118+�(2)8+�(5)8+�(9)编码密集十进制:表4编码3个十进制数字�(1),�(2),�(3),每个数字都有4位字节,可以用第二10位字节�(0)至�(9)0是最低有效位。表4中,大多数计算操作仅生成1000个规范的10位字节模式。4310�(1,0),�(2,0),�(3,0)�(0),�(1),�(2)�(3),�(4),�(5)�(6)�(7),�(8),�(9)000�(1,1:3)�(2,1:3)0�(3,1:3)001�(1,1:3)�(2,1:3)10,0,�(3,3)010�(1,1:3)�(3,1:2),�(2,3)10,1,�(3,3)011�(1,1:3)1,0,�(2,3)11,1,�(3,3)100�(3,1:2),�(1,3)�(2,1:3)11,0,�(3,3)101�(2,1:2),�(1,3)0,1,�(2,3)11,1,�(3,3)110�(3,1:2),�(1,3)0,0,�(2,3)11,1,�(3,3)1110,0,�(1,3)1,1,�(2,3)11,1,�(3,3)GB/T17966—XXXX/ISO/IEC60559:202001x11x111x、10x11x111x或11x11x111x(其中“x”表示“无关”位字节)为24个非规范项的格式,不会在计算操作的结果中生成。但是,如表4所示,这24位字节项确实映射从0~999范围内的值。NaN尾随字段中的字节项会影响NaN的传播方式(见8.2)。交换格式参数交换格式支持浮点数据间的交换。在每个基数中,交换格式的精度和范围由其长度定义;因此,给定长度的浮点数据的交换总是精确的,不存在上溢或下溢的可能性。本文件定义了宽度为16、32、64和128位字节的二进制交换格式,通常用于至少128位字节的32位的任意倍数。十进制交换格式是为至少32位字节的32任意倍数定义的。如表5p如表6所示。交换格式的编码如5.4和5.5.2所述;表5和表6还给出了每个交换格式宽度的编码参数。表5二进制交换格式参数参数二进制16二进制32二进制64二进制128二进制{k}(k≥128)k,存储宽度(位)16326412832的倍数p,精度(位)1124531134��3emax,最大阶码15127102316383�−1编码参数E-e,偏差15127102316383emax符号位11111w,阶码字段宽度(位)581115��3t,后置有效字段宽度(位)102352112k–w–1k,存储宽度(位)1632641281+w+t在表5中,round()舍入到最接近的整数。256将有p=23ex=2624。表6十进制交换格式参数参数十进制32十进制64十进制128十进制{k}(k≥32)K,存储宽度(位)326412832的倍数p,精度(位)716349×k/32–2emax,最大阶码963846144�3136编码参数E-e,偏差1013986176emax+p–2符号位1111w+5,组合字段宽度(位)111317+9t,后置有效字段宽度(位)2050110×–k,存储宽度(位)32641281+5+w+t例如,十进制256。注:本文件将单个数据的表示定义为概念上的第4级实体。在不同实现之间交换数据的应用程序必须传递某些描述数据格式和布局的参数。除了影响所有数据交换的字节顺序等问题外,还必须考虑允许的某些实现选项:GB/T17966—XXXX/ISO/IEC60559:2020——于二进制格式,如何区分sNaN和qNaN。——对于十进制格式,使用二进制还是十进制编码。本文件未规定如何传递这些参数。扩展和可扩展精度推荐使用扩展和可扩展的精度格式,以扩展用于基本格式之外的算术精度。具体来说:——扩展精度格式是一种运算格式,它以更高的精度和更宽的范围扩展了支持的基本格式;——可扩展精度格式是一种精度和范围由用户自定义的运算格式。所表征,这些参数可以与交换格式的参数相匹配。并应:——提供在5.2和5.3中参数定义的浮点数据的所有表示形式;——为该格式提供第7章中定义的所有操作。这些格式的编码宜是固定长度的,且可与交换格式的编码相匹配。浮点数的每种表示方式都具有唯一的规范编码,也可有非规范编码。这些格式中的每个NaN都有一个有效载荷,可以编码诊断信息。每个NaN的有效载荷均有规范编码,也可有非规范编码。这些格式的编码的所有其他方面均由实现定义。语言标准宜为每个支持的基数定义可扩展精度的机制。支持可扩展精度的语言标准应允许用户指在二进制格式中≥237在十进制格式中≥51位时,语言标准应将emax定义为至少。语言标准或实现宜支持扩展精度格式,该格式应扩展该基数支持的最宽的基本格式。表7规定了每种基本格式的扩展精度格式的最小精度和阶码范围。表7浮点数的扩展格式参数参数与以下相关的扩展格式二进制32二进制64二进制128十进制64十进制128位数p≥32641282240emax≥10231638365535614424576注1:对于扩展格式,最小阶码范围是下一个更宽的基本格式的阶码范围(如果有的话)。而最小精度则介于给定的基本格式和下一个更宽的基本格式之间(如果有的话)。2:k(位有效位数的最小格式的位)表示为:k=3ciigp+rud×��2(p+rud×��2(1))-1)/2)其中round()舍入到最接近的整数,且p≥113;对于更小的p值,见表5.5。kpk=32×ceiling((p+2)/9),其中p≥1。在这两种情况下,选择的格式可能有更大的精度(见5.4和5.5.2)。3:p3同样,emax211.2属性与舍入属性规范属性在逻辑上与一个程序块相关联,以修改其数值语义和异常语义。用户可以为属性参数指定一个常量值。有些属性对本文件的大多数单个操作具有隐式参数的影响。语言标准应应规定舍入方向属性(见6.3),并宜规定备用异常处理属性(见第10章)。其他属性会改变语言表达式与本文件操作的映射;允许多个这样映射的语言标准宜提供以下支持:——首选宽度属性(见12.3);——值变化的优化属性(见12.4);——可复现属性(见第13章)。对于属性规范,应提供语言定义的方法,如编译器指令,以便为块中的操作指定属性参数的常量值;属性值的范围是与其关联的块。语言标准应规定属性的默认值和每个特定值的恒定规范。属性的动态模式本文件中的属性应支持6.1的常量规范。特别是为了支持调试,语言标准还宜支持属性的动态模式规范。通过动态模式规范,用户能指定属性参数来采用动态模式变量的值,该变量的值在程序执行前可能是未知的。本文件并没有指定常量属性或动态模式的底层实现机制。对于动态模式的规范,实现应提供语言定义的方法,以指定属性参数在动态模式规范范围内的操作采用动态模式变量的值。该实现将动态模式变量初始化为动态模式的默认值。在其语言定义的(动态)范围内,对动态模式变量值的更改是由用户通过11.3.1和11.3.2的操作来控制的。动态模式变量的以下方面是由语言定义的;语言标准可以将定义明确地延伸到运算中:——静态属性规范和动态模式分配的优先级;——在异步事件中(如在另一个线程或信号处理程序中)改变动态模式变量的值的效果;——动态模式变量的值是否可以通过非编程方式(如调试器)确定。注:可以为属性指定一个常数值,并通过具有适当范围的常量值的动态模式规范来满足6.1的要求。舍入方向的属性概述舍入采用一个无限精确的数字,并在必要时对其进行修改以适应目的地格式,同时在适当的时候发出不精确、上溢或下溢的异常信号(见第9章)。除非另有说明,每个操作的执行应首先产生一个精确到无限精度且无限范围的中间结果,然后根据本章的某个舍入属性对该结果进行舍入。除非另有说明,否则舍入方向属性会影响所有可能不精确的计算操作。不精确的数字浮点结果总是与舍入后的结果具有相同的符号。舍入方向属性会影响精确“零和”的符号(见8.3),也会影响上溢(见9.4)和下溢(见9.5)信号的阈值。同时支持十进制和二进制格式的实现应为二进制和十进制提供单独的舍入方向。使用与结果基数关联的舍入方向属性使用以浮点格式返回结果的操作。以浮点格式返回结果的操作应使用与结果的基数相关联的舍入方向属性。从浮点格式的操作数转换为整数格式的结果或外部字符序列的操作(见7.8和7.12)应使用与操作数的基数相关联的舍入方向属性。NaN不会被舍入(见8.2.3)。舍入方向趋向最近12在以下两个舍入方向属性中,大小至少为���𝑒∗(�− �1−�)的无限精确结果应舍入到∞且符12由目的地格式决定(见5.3)。——roundTiesToEven,舍入到最接近无限精度结果的浮点数;如果一个无法表示的无限精确结果存在两个最接近的浮点数,舍入到最低有效数字为偶数的那一个;如果两个最接近的浮点数的最低有效数字都是奇数,则舍入到绝对值更大的那个数(这中情况可能发生在一位数精度9.591101最低位都是奇1101);——roundTiesToAway,舍入到最接近无限精度结果的浮点数;如果一个无法表示的无限精确结果存在两个最接近的浮点数,舍入到绝对值更大的那个数。定向舍入属性定义了其他三个用户可选择的舍入方向属性,即roundTowardPositive、roundTowardNegative和roundTowardZero。roundTowardPositive,舍入到最接近且不小于无限精确结果的格式浮点数(可能为+∞);roundTowardNegative,舍入到最接近且不大于无限精确结果的格式浮点数(可能为–∞);roundTowardZero,舍入到最接近且绝对值不大于无限精度结果绝对值的浮点数。舍入属性要求本文件的实现应提供roundTiesToEven和三个定向舍入的属性。本文件的十进制格式的实现应提供roundTiesToAway作为用户可选择的舍入方向属性。二进制格式的实现不需要roundTiesToAway。roundTiesToEven舍入方向属性应是二进制格式结果的默认舍入方向属性。十进制格式的结果的默认舍入方向属性是由语言定义的,宜采用roundTiesToEven。操作概述符合本文件的所有实现应为所有可支持的运算格式提供本章所列的操作,除非下文另有说明。除非另有规定,否则所有符合本文件且得出数值结果的计算操作得出一个无限精确且无限范围的中间结果,必要时对该中间结果进行舍入,以符合目的地格式(见第6章和第9章)。第8章增加了覆盖±0、±∞和NaN的规定。第9章描述了默认的异常处理。在本文件中,操作被命名为函数(公式);在特定的编程环境中,它们由运算符、特定格式的函数式或本文件中未命名的操作或函数式来表示。根据产生的结果和异常的种类,操作大致分为四类:69——静默计算操作,产生浮点结果,并且不发出浮点异常信号;——信号计算操作,不产生浮点结果,可能会发出浮点异常信号,如比较操作;——非计算性操作,不产生浮点结果,也不会发出浮点异常信号。前三组中的操作统称为“计算操作”。根据结果格式和操作格式之间的关系,操作也分为两类:——同类型操作,其中浮点操作数和浮点结果的格式都相同;操作,表示结果的格式,与操作数的格式无关。GB/T17966—XXXX/ISO/IEC60559:2020语言标准允许表达式中的其他类型的操作或组合型操作。语言标准通过其表达式评估规则,规定何时以及如何将这些操作和表达式映射到本文件的操作中。操作(除了重新编码操作除外)不必接受操作数或产生不同编码的结果。除非另有规定,操作结果应符合7.5。在下面的操作说明中,操作数和结果格式用以下形式表示:表示同类型浮点操作数的格式表示非同类型浮点操作数的格式表示整数操作数的格式表示真或假的值(01)表示一小部分枚举值中的一个表示与源格式相同的目的地格式表示包含整数值的格式的阶码操作数表示十进制字符序列表示十六进制有效位字符序列表示与语言相关的转换规范表示支持的十进制浮点格式表示以十进制编码的十进制浮点格式表示二进制编码的十进制浮点格式运算的异常表示一组状态旗标表示二进制的舍入方向表示小数的舍入方向——modeGroup表示动态指定模式——void表示一个操作没有明确的操作数或没有明确的结果;操作数或结果可能是隐式的。表示操作的名称指定浮点目的地格式,可能与浮点操作数的格式不同。对于每个支持的版本。表示运算的名称指定了整数目的地格式。在后面的操作描述中,语言定义了类型以及所对应的操作数和结果。同时具备有符号和无符号整操作数和结果。十进制阶码计算如5.5中所述,一个浮点数可能有多种十进制格式的表示形式。因此,十进制算法不仅要计算正确的数值结果,而且要选择该浮点数同类型的适当结果。除了量化操作之外,浮点结果的值(及其同类)由操作和操作数的值确定,并不依赖于操作数的表示形式或编码形式。如下所述,浮点结果的特定表示形式的选择取决于操作数的表示方法,但不受其编码的影响。对于所有计算操作而言,除非另有说明,否则如果结果不精确,则使用最小可能阶码的同类型结果来获得最大有效位数。如果结果是精确的,则根据该操作结果的首选阶码选择同类型结果,该阶码0的同类型中的不同结果。如果结果的队列不包括首选阶码的结果,则使用最接近阶码的首选结果。对于quantize和roundToIntegralExact,无论结果是否精确,有限结果都具有首选阶码性。为+∞。GB/T17966—XXXX/ISO/IEC60559:2020同构通用计算操作一般操作运算应向所有支持的运算格式提供以下同构通用计算操作:roundToIntegralTiesToEvenroundToIntegralTiesToAwayroundToIntegralTowardNegative7.9。首选阶码为max(Q(source),0)。——sourceFormatroundToIntegralExact(source)具体细节见7.9。首选阶码为max(Q(source),0),即使发出不精确异常信号。nextUp(source)NextDown(source)nextUp(x)xx大的最小浮点数。如果xx格式中最小量级的负数,则nextUp(x)为−0。nextUp(±0)xnextUpnextUp(−xNaN8.2nextUp(sNaN)会产生nextUp首选阶码是最小可能。nextDown(x)的值是-nextUp(-x)。remainder(source,source)y0xyr=x−y×nr=remainder(x,yn是最接近精确数字x/yn是偶数。因此,remainder操作总是精确的。如果r=0,则其符号应为xx,remainder(x,∞)的值为x。首选阶码为min(Q(x),Q(y))。ISO/IEC60559:2008规定的minNum和maxNum操作已经被9.6规定的推荐操作所取代。十进制操作支持十进制格式的运算应向所有可支持的十进制运算格式提供以下同构通用计算操作:——sourceFormatquantize(source,source)xy,quantiz(x,y)是格式相同的浮点数,如果可能xy性进行舍入:结果是不同的浮点表示形式,如果结果与xpNaN。如NaN8.2NaNx首选阶码为Q(y)。支持十进制格式的运算宜向所有可支持的十进制运算格式提供以下同类型通用计算操作:——sourceFormatquantum(source)GB/T17966—XXXX/ISO/IEC60559:2020xquantum(x)是由(0,q,1)qxxquantum(x)是+∞,不发出异常信号。首选阶码为Q(x)。LogBFormat运算应向可用于算术的所有支持浮点格式提供以下通用计算操作。对于每个可支持的运算格式,语言都定义一个相关的logBFormat来包含logB(x)的整数值。logBFormat±之间的所有整数,其中包括最大和最小数有效数字之间的比例系数。——sourceFormatscaleB(source,logBFormat)N,scaleb(x,N)x×bN。计算结果的方式是如果生成精确乘积,然后根据适logBFormatNscaleB(±0,N)则得出±0,scaleB(±∞,N)NscaleB(x,N)x。首选阶码为Q(x)+N。——logBFormatlogB(source)logB(x)xexx1≤scaleB(x,−logB(x))<b。logB(1)的值为+0。是浮点格式时,logB(NaN)NaN,logB(∞)的值是+∞,logB(0)的值是−∞,并发出被零除异常信号。当是整数格式时,则logB(NaN)、logB(∞)logB(0)的结果超出语言定义的范围值±2×(emax+p-1),并发出无效操作异常信号。首选阶码为0。注:对于正有限x,logB(x)的值为floor(log2(x))(二进制),或floor(log10(x))(十进制)。通用计算操作的格式计算操作对于所有可支持的运算格式的目标,运算应提供以下通用计算操作格式,并为每个目的地格式提供与目的地格式相同的基数和所有可支持的运算格式的操作数。addition(x,y)x+y。首选阶码为min(Q(x),Q(y))。subtraction(x,y)x-y。首选阶码为min(Q(x),Q(y))。multiplicationmultiplication(x,y)x*y。首选阶码为Q(x)+Q(y)。divisiondivision(x,y)x/y。首选阶码为Q(x)−Q(y)。squareRootsquareRoot(x)计算√x。要求所有操作数都≥0(带+号),除了平方根(−0)值为−0。GB/T17966—XXXX/ISO/IEC60559:2020首选的阶码是floor(Q(x)/2)。fusedMultiplyAdd(fusedMultiplyAdd(x,y,z)操作以无限范围和精度计算(x×y)+z,且只对目的地格式进行一次舍入。下溢、上溢或不精确异常(9)只能由于精确值(xy)z生。因此,每次融合操作只能调用最多一个异常信号。fusedMultiplyAdd不同于先进行multiplicationaddition首选阶码为min(Q(x)+Q(y),Q(z))。convertFromInt(int)应能将所有可支持的有符号或无符号整数格式转换为所有可支持的运算格式。只要值可以用两种格式表示,就可以将整数值从整数格式精确地转换为浮点格式。如果转换后的值不能准确地用目的地格式表示,则结果将根据适用的舍入方向属性确定,并出现不精确或浮点上溢9首选阶码为0。实现应向所有可支持的整数格式的目的地和所有可支持的运算格式的操作数,提供以下通用计算操作。——intFormatOf-convertToIntegerTiesToEven(source)intFormatOf-convertToIntegerTowardZero(source)intFormatOf-convertToIntegerTowardPositive(source)intFormatOf-convertToIntegerTowardNegative(source)intFormatOf-convertToIntegerTiesToAway(source)具体细节见7.8。——intFormatOf-convertToIntegerExactTiesToEven(source)intFormatOf-convertToIntegerExactTowardZero(source)intFormatOf-convertToIntegerExactTowardPositive(source)intFormatOf-convertToIntegerExactTowardNegative(source)intFormatOf-convertToIntegerExactTiesToAway(source)具体细节见7.8。注:当在7.4中提到的一个或多个操作的序列得出正确的数值、量值和异常结果时,运算中可能会提供本章中的一些操作,以及7.4.2操作。浮点格式和十进制字符序列的转换操作实现应向所有可支持的浮点格式提供转换为其他可支持的浮点格式的转换操作,以及与十进制字符序列之间的转换。某些格式转换操作产生的结果与操作数的基数不同。——formatOf-convertFormat(source)如果转换为不同基数的格式或同一基数的精度较窄的格式,则结果应按照第6章的规定进行舍入。转换成基数相同但精度和范围更大的格式总是更精确的。对于从二进制格式到十进制格式的不精确转换,首选阶码是最小可能性的。对于从二进制格式到十进制格式的精确转换,首选阶码为0。对于十进制格式之间的转换,首选阶码是Q(source)。注:具有相同源格式和目的地格式的convertFormat操作是一种规范化操作,它向NaN操作数发出无效操作的异常信号,这与copy操作(见7.5.1)不同——formatOf-convertFromDecimalCharacter(decimalCharacterSequence)具体细节见7.12。首选阶码是Q(decimalCharacterSequence),它是十进制字符序列有效位中最后一位的阶码值q。——decimalCharacterSequenceconvertToDecimalCharacter(source,conversionSpecification)GB/T17966—XXXX/ISO/IEC60559:2020具体细节见7.12。conversionSpecification指定decimalCharacterSequence结果的精度和格式。二进制格式的转换操作运算应向所有可支持的二进制浮点格式之间提供转换操作。——formatOf-convertFromHexCharacter(hexCharacterSequence)具体细节见7.12。——hexCharacterSequenceconvertToHexCharacter(source,conversionSpecification)具体细节见7.12。conversionSpecification指定hexCharacterSequence结果的精度和格式。静默计算操作符号位操作运算应为所有可支持的算术交换格式提供以下同构静态计算符号位操作;它们只影响符号位。这些操作对浮点数和NaN都一样,没有任何例外。这些操作可能会转换成非规范编码。——sourceFormatcopy(source)negate(source)abs(source)copy(x)以相同的格式将浮点操作数x复制到目的地,不改变符号位。negate(x)以相同的格式将浮点操作数x复制到目标,反转符号位。negate(x)8.3)。abs(x)以相同的格式将浮点操作数x复制到目的地,将符号位设置为0(正)。——sourceFormatcopySign(source,source)copySign(x,y)xxycopy、negate、abscopySign5.25.3):对于数字x,——copy(x)与x具有相同的表示形式,不改变符号——negate(x)与x具有相同的表示形式,但符号相反——abs(x)与x具有相同的表示形式,但符号为0(正)——copySign(x,y)xyyy对于x为NaN,操作结果的表示形式与x(qNaN或sNaN)相同。如果编码允许,非交换格式的操作应遵循交换格式符号位操作规范。十进制重新编码操作对于每个支持的十进制交换格式,运算应提供以下操作,以便和十进制格式的两种编码之间进行转换(见5.5.2)。这些操作使独立于十进制格式实现的编码的可移植程序能够访问用任一编码表示的数据。如果结果格式的有效位编码与操作数格式的有效位编码相同,则这些操作应为复制操作。这些操作可能传播非规范编码;如果结果格式的有效位编码与操作数格式的有效位编码不同,则结果应该是规范的。——decimalEncodingencodeDecimal(decimal)使用十进制编码对操作数的值进行编码。——decimaldecodeDecimal(decimalEncoding)对十进制编码的操作数进行解码。GB/T17966—XXXX/ISO/IEC60559:2020——binaryEncodingencodeBinary(decimal)使用二进制编码对操作数的值进行编码。——binaryEncodingdecodeBinary(decimal)对二进制编码的操作数进行解码。信号计算操作对于所有支持的相同基数运算格式的浮点操作数,实现应提供以下比较操作:compareQuietEqual(source1,source2)具体细节见7.11.非计算操作一致性预测运算应提供以下非计算性操作,当且仅当所示条件为真时为真:is754version1985(void)当且仅当此编程环境符合IEEEStd754-1985时,is754version1985()为真。——booleanis754version2008(void)当且仅当此编程环境符合IEEEStd754-2008时,is754version2008()为真。——booleanis754version2019(void)当且仅当此编程环境符合本文件时,is754version2019()为真。实现宜使这些预测在翻译时(如果适用)可用,以便在那时确定它们的值。通用操作GB/T17966—XXXX/ISO/IEC60559:2020运算应为所有支持的运算格式提供以下非计算性操作,并应为所有支持的交换格式提供这些操作。即使对于qNaN,这些操作也是如此。class(source)class(x)xqNaNnegativeInfinitynegativeNormalnegativeSubnormalnegativeZeropositiveZeropositiveSubnormalpositiveNormalpositiveInfinity.isSignMinus(source)当且仅当x有负号时,isSignMinus(x)为真,isSignMinus也适用于0和NaN。isNormal(source)当且仅当x为正规数(不是零、非正规、无穷或NaN)时,isNormal(x)为真。isFinite(source)当且仅当x为零、非正规数或正规数(不是无穷或NaN)时,isFinite(x)为真。isZero(source)当且仅当x为±0时,isZero(x)为真。isSubnormal(source)当且仅当x为非正规数时,isSubnormal(x)为真。isInfinite(source)当且仅当x为无穷时,isInfinite(x)为真。isNaN(source))当且仅当x为NaN时,isNaN(x)为真。isSignaling(source)当且仅当x为sNaN时,isSignaling(x)为真。isCanonical(source)当且仅当x是一个有限数、无穷大、或规范的NaNiscanonic(x)为真。实现宜将iscanonic(x)扩展到非交换格式,并以适合这些格式的方式进行扩展。这些格式可能有,也可NaN。radix(source)radix(x)是x格式的基数b,即2或10。——booleantotalOrder(source,source)totalOrder(x,y)在7.10中定义。totalOrderMag(source,source)totalOrderMag(x,y)totalOrder(abs(x),abs(y))。实现宜使这些预测在翻译时(如果适用)可用,以便在那时确定它们的值。十进制操作支持十进制格式的实现应为所有支持的十进制运算格式提供以下非计算性操作:——booleansameQuantum(source,source)GB/T17966—XXXX/ISO/IEC60559:2020对于格式相同的数值十进制操格式的x和y,如果x和y的阶码相同,即Q(x)=Q(y),则sameQuantum(x,y)为真,否则为假。sameQuantum(NaN,NaN)和sameQuantum(∞,∞)为真;如果只有一个操作数是无穷的,或者只有一个操作数是NaN,则sameQuantum为假。sameQuantum并不会发出异常信号,即使参数是一个sNaN。旗标子集的操作实现应提供以下非计算性操作,这些操作共同作用于多个状态旗标;这些操作并不表示异常:lowerFlags(exceptionGroup)降低(清除)与exceptionGroup操作数中指定的异常对应的标志,该操作数可以表示异常的任何子集。raiseFlags(exceptionGroup)引发(设置)与exceptionGroup操作数中指定的异常对应的标志,该操作数可以表示异常的任何子集。testFlags(exceptionGroup)查询与exceptionGroup操作数中指定的异常(可以表示异常的任何子集)对应的任何标志是否被引发。testSavedFlags(flags,exceptionGroup)查询与exceptionGroup操作数中指定的异常对应的旗标操作数中的任何标志(可以表示异常的任何子集)是否被引发。restoreFlags(flags,exceptionGroup)恢复与exceptionGroup操作数中指定的异常(可以表示异常的任何子集)相对应的标志到旗标标志操作数中表示的状态。saveAllFlags(void)saveAllFlags操作的返回值用作同一程序中restoreFlags或testSavedFlags操作的第一个操作数;本文件不需要任何其他用途的支持。浮点格式到整数格式转化的详细说明运算应提供从所有支持的运算格式到所有支持的有符号和无符号整数格式的转换操作。只要数值可以用两种格式表示,整数值就会从浮点格式精确地转换为整数格式。整数的转换应按第6章的规定进行舍入;舍入方向由操作名称指示。当一个NaN或无限操作数不能用目的地格式表示,并且不能用其他形式表示时,应发出无效操作异常信号。当数字操作数将转换为目的地格式范围之外的整数时,如果无法用其他方式表示这种情况,则应发出无效操作异常信号。当转换操作的结果值与其操作数值不同,但可以用目的地格式表示时,下面指定一些转换操作来发出不精确异常,而其他转换操作则不发出不精确异常。允许隐式转换或设计混合类型的表达式的语言标准应要求使用下面的不精确信号转换操作来实现这些转换。在不发出不精确异常信号的情况下,从浮点格式转换为特定的有符号或无符号整数格式的操作:convertToIntergerTiesToEven(x)将x舍入为最接近的整数值,中间的情况舍入为偶数。——intFormatOf-convertToIntergerTowardZero(source)convertToIntergerTowardZero(x)将x舍入为一个接近零的整数值。GB/T17966—XXXX/ISO/IEC60559:2020convertToIntegerTowardPositive(x)将x舍入为正无穷大的整数值。convertToIntegerTowardNegative(x)将x舍入为负无穷大的整数值。convertToIntegerTiesToAway(x)将x舍入到最接近的整数值,中间的情况从零舍入。从浮点格式转换为特定的有符号或无符号整数格式(如果不精确,则发出信号)的操作:——intFormatOf-convertToIntegerExactTiesToEven(source)convertToIntegerExactTiesToEven(x)将x四舍五入到最接近的整数值,中间的情况舍入为偶数。——intFormatOf-convertToIntegerExactTowardZero(source)convertToIntegerExactTowardZero(x)将x舍入为一个接近零的整数值。convertToIntegerExactTowardPositive(x)将x舍入为正无穷大的整数值。convertToIntegerExactTowardNegative(x)将x舍入为负无穷大的整数值。——intFormatOf-convertToIntegerExactTiesToAway(source)convertToIntegerExactTiesToAway(x)将x舍入为最接近的整数值,中间的情况从零舍入。将浮点数据舍入为整数值的细节有几种操作以相同格式将浮点数舍入为整数值浮点数。舍入方法与第6章中的规定类似,但舍入只能从格式中的整数值的浮点数中进行选择。这些操作将零操作数转换为同一符号的零结果,将无限操作数转换为同一符号的无限结果。对于以下操作,舍入方向由操作名称指定,不依赖于舍入方向属性。除sNaN输入外,这些操作不应发出任何异常信号。roundToIntegralTiseToEven(source)roundToIntegralTiseToEven(x)将x舍入到最接近的整数值,中间的情况舍入到偶数。roundToIntegralTowardZero(source)roundToIntegralTowardZero(x)将x舍入为一个接近零的整数值。roundToIntegralTowardPositive(source)roundToIntegralTowardPositive(x)将x舍入为正无穷大的整数值。roundToIntegralTowardNegative(source)roundToIntegralTowardNegative(x)将x舍入为负无穷大的整数值。roundtointegraltiestaway(source)roundToIntegralTiesToAway(x)将x舍入到最接近的整数值,中间的情况下从零舍入。对于以下操作,舍入方向是适用的舍入方向属性。对于sNaN操作数,此操作发出无效操作异常信号,对于数值操作数,如果结果与x的数值不同,则发出不精确异常信号。roundToIntegralExact(source)roundToIntegralExa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论