附录D(规范性附录)D.1范围本附录仅规定了与本文档其他地方未定义的数学函数,例如基本或其他分析函数。此类数学函数应明确定义在仿射扩展实数的子域,以下简称域,具有仿射扩展实数中的值。给定这样一个数学函数,本附录规定了相应的计算函数,以下称为操作。数学函数是由语言定义的。[理由:(i) 给定实数上函数的适当数学定义,这是一种语言的责任,附件D应为实现这样一个正确定义的功能的手册。我们需要区分纯数学函数及其浮点实现。我们面临的一些问题,例如,1^infty的00不是浮点问题,它们是数学问题。因此,它们应该是语言定义的。其他一些问题,例如与有符号零相关的问题,是浮点问题。本标准旨在解决浮点问题,而不是定义更一般的数学。作为一个例子,似乎有一个共识是围绕权力的问题通过考虑三个不同的数学幂函数,即代数幂(x,n)、根(x,n)和analyticPower(x,y),其中x和y是实数,n是非负整数。(ii)我们考虑的数学函数定义在仿射扩展实数的子集及其常规拓扑结构。我们假设以下定义,或等效的,出现在标准的其他地方:“无限算术应定义为实数的仿射扩展数字,具有两个无限值,使得-infty<(every有限数)<+infty。".在大多数情况下,在数学函数的定义:无穷大出现作为定义在雷亚尔。然而,在这种限制的情况下数学意义,不存在(例如1^infty或sinPi(infty)),此公式允许语言定义函数在仿射扩展的“点”处的值雷亚尔。(iii)“其他地方未定义”的理由:浮点附录D中定义的行为旨在保持自我一致并且明确无误。其提供的规则可用于定义addition()、multiplication()、division()和squareRoot(),这确实是公认的数学功能。然而,行为会略有不同与当前标准的墙角卡相比,例如平方根(-0),并且有很好的理由保持案例。]D.2合格操作操作应返回数学函数的结果根据以下主要舍入方向正确舍入其域中的所有操作数,只有一个例外:如果舍入值不属于由数学函数,常用的舍入模式为roundTiesToEven或roundTiessAway,操作应返回属于域的映像且最近的浮点数数学函数的值。[理由:(i) 为操作指定正确的舍入会产生位精确性允许高便携性的结果。(ii)然而,保护牧场被认为更重要保留数学属性以进行舍入到最接近的模式。防止操作员的行为与数学函数。一个典型的例子是反正切:数学函数tan的一个性质而atan是tan(atan(x))=x并且给定的规则允许将其转换为FPtan(FPatan(x))=x+小FP误差(iii)在这种特殊情况下适用的规则仍然导致明确的结果(可能除了病理数学函数),因此具有可移植性。(iv)此特殊情况规则不用于直接取整模式。假设主要使用定向舍入模式用于实现区间算法和正确的区间有了这个特殊功能,算术就更难实现了案例规则。]与数学函数相关的操作应向所有适当的例外情况,但不精确的除外。不允许操作当结果不准确时发出不准确的信号。然而,如果常用的舍入模式是一种定向舍入模式操作不应发出准确结果的不准确信号。[理由:在某些情况下,确定不精确可能代价高昂这里定义的函数几乎在所有函数上都具有先验图像他们的论点没有多大用处,发出了不准确的信号。然而,不是在直接如果无论如何都要实现正确的舍入,则选择舍入模式。]操作应按照8.3发出零除信号,溢出为第8.4条和第8.5条规定的底流。它们应发出无效信号当输入无效时(定义如下)。对于所有操作,发送NaN操作数信号应发送无效例外。如果其中一个操作返回静默NaN争论是一个安静的NaN。对于n元数学函数f和浮点数X1,。。。,Xn,如果f(X1,…,Xn)定义为某个实值y,则与f(X1,…,Xn)相关的操作应返回y四舍五入到常用的舍入模式(如果y为零,则应选择符号根据以下规则)。[理由:当函数具有用于某些输入的真实图像时,选择如下直截了当。只有在没有实值时才能使用限制参数可以通过“评估”数学函数。]否则,考虑极限(在仿射扩展实数中)f(x1,…,xn)的值,因为(x1、…、xn)指向(x1,…、xn)。Xi为+0或-0,此限值应仅考虑为正数相应xi的(相对负)值。在这种情况下,如果极限不存在,但其他0符号存在极限同样,不存在的限额也应视为现有限额和同等水平。如果不存在f(x1,…,xn)的限制,(x1,……,xn)应被视为无效的操作数。注意,当(X1,…,Xn)不属于函数域的闭包。如果此限制存在并且是实数c,则关联的操作带f(X1,…,Xn)的返回值c应根据当前值四舍五入舍入模式,如果舍入值不属于函数域的映像。如果该极限为+无穷大或-无穷大之一,操作应返回这个无穷大。[理由:如果数学函数的定义没有如果允许确定值,则必须使用limit参数。我们考虑数学意义上的极限:显示一个特定的收敛到值的序列是不够的。确实,使用可以使收敛到(1,infty),pow(x,y)的序列收敛朝向任何值c(其中一些在某些情况下有用)。请注意乘法(0,infty)也是如此。以前的标准将其定义为NaN,我们的选择与之一致。将0的符号解释为表示0的半空间已获得普遍认可。这可能会导致与真0和下溢值刷新为0。以下内容管理这些问题。]如果操作返回的值为0,则以下规则应申请本0的标志。让sgn成为数学功能定义如下:/|如果x>0,则为1如果x<0,sgn(x)=|-1|如果x=0,则为0\考虑sgn(f(x1,…,xn))的极限,因为(X1,…,Xn)。当Xi的某些值为+0或-0时sgn(f(x1,…,xn))应仅使用正(分别为。负)相应xi的值。设S是的极限集(簇点集)sgn(f(x1,…,xn)),当(x1、…、xn)转到(x1、……、xn)时。*如果S={1}或S={1,0}:与f相关的操作应返回+0。*如果S={-1}或S={-1,0}:与f相关的操作应返回-0。*如果S={1,-1}或S={1,-1,0}:与f关联的操作如果当前取整模式为roundTowardNegative,则应返回-0,否则为+0。*如果S={0}:与f关联的操作应返回+0。*如果S为空:与f关联的操作应返回0使用零符号规则获得的符号考虑到习近平的符号等于零。[理由:如果函数的值为零,则此0的符号为最佳通过考虑符号的连续延伸来确定数学函数的函数。当数学毫无歧义地规定规则时,我们使用“shall”(前两项)。相反,当一些武断的必须做出选择,并优先选择+0。如前所述,输入中的0符号决定了用于获得极限。但是,如果函数在0和在0中不连续,极限参数变得无用。如果0的符号取决于主要的四舍五入模式,我们的定义与符号的定义一致x-x。]注:根据这些规则,当f是奇数函数时与f相关联的操作可能在某些x上返回+0,在-x上也返回+0,即使在对称的圆角方向。应用程序程序员应该意识到这一点。[备注:根据规则,sinPi对所有整数返回+0——它是大小写S={1,-1,0}“应该”是为了允许实现有利于符号对称用于此类功能。]D.3合规性遵循本附录D.2中规范的任何操作应被视为符合。不应说明的任何操作不符合。每次操作都会达到这种一致性单个:实现可能只适用于某些操作(或无)。任何操作都可以不在不影响任何其他操作或整体实施。此外,对于给定的数学函数,实现可能包括符合以及另一个则不允许,并允许用户在两者之间进行选择。实现应提供正确返回的操作尽可能多的数学函数的四舍五入结果高效实现,适用于所有支持的浮点格式。语言应定义哪些操作是必需的或建议的以符合要求。当语言未将操作指定为根据本附件,每个实施都应记录域、例外情况和达到的最坏情况精确度,以及指出精确度是否经过验证或测量输入。按D.2规定实施的操作具有以下属性它们保持了单调性。实施的操作符合D.2仍应保持单调性。注意D.2中给出的规则适用于通常的数学功能,包括D.4中列出的功能。如果,对于一些数学函数和一些参数,这些规则不适用,则操作应被视为不符合实现应该记录这样的操作的行为案例。[理由:存在特殊(病理)数学函数应用D.2中的规则将在不同的情况下产生不同的结果数学上下文(拓扑、公理选择等)。定义这种数学背景超出了本标准的范围。大多数此类功能都是临时构建的,预计不会是工程和其他浮点中常用的函数应用。特别是,他们的定义域通常不是定义明确。例如,函数x->x*sqrt(sin(1/x)),它在0附近经常是无限定义的,经常是无限未定义的。只有在这些情况下,上述规则没有指定明确的操作。操作应考虑在IEEE 754标准附录D的范围。实施可能符合本案例中的其他标准。]D.4数学函数信息列表在下面的Z={…,-3,-2,-1,0,1,2,3,…}中定义域用仿射扩展实数表示。-日志x[0,infty]-log2 x[0,infty]-日志10 x[0,信息]-log1p x[-1,infty]-log2p1 x[-1,infty]-log10p1 x[-1,infty]-exp x[输入,输入]-exp2 x[-infty,infty]-exp10 x[输入,输入]-expm1 x[-infty,infty]-exp2m1 x[输入,输入]-exp10m1 x[-英寸,英寸]-sin x]-infty,infty[-cos x]-infty,infty[-tan x]-infty,infty[\{Pi/2+k*Pi,k in Z}-sinpi x]-输入,输入[-cospi x]-输入,输入[-tanpi x]-infty,infty[\{1/2+k,Z中的k}-sinh x[-infty,infty]-cosh x[-infty,infty]-tanh x[-infty,infty]-asin x[-1,1]-acos x[-1,1]-atan x[-infty,infty]-asinpi x[-1,1]-acospi x[-1,1]-atanpi x[-infty,infty]-argsinh x[-infty,infty]-argcosh x[0,infty]-argtanh x[-1,1]-atan2(x,y)[-infty,infty]*[-infy,infty]\{(0,0),(0,infty),(+/-infty、+/-infy)}以弧度为单位返回[0,2*Pi[这样一条线段与x轴形成这个角度穿过(x,y)-hypo(x,y)=平方根(x2+y2)[-infty,infty]*[-infity,infty]-分析功率(x,y)=exp(y*log(x))[0,infty]*[-infty,infty]\{(0,0),(infty,0),,(1,+/-infty)}/x*x*…*x(n次),如果n>=1|1/代数幂(x,-n),如果n<=-1-代数幂(x,n)=|1,如果n=0\其他方面未定义[-infty,infty]*Z[注释:algebraicPower的第二个参数n是一个整数与此函数关联的操作可能会考虑其第二个参数作为语言定义的整数。]/如果n>=1且根存在,则x的主n次根-根(x,n)=|1/root(x,-n),如果n<=-1\其他方面未定义[0,infty]*(Z\{0})U[-intfy,0[*(Z\2Z)[注释:root的第二个参数n是一个整数与此函数相关联的第二个参数可能是语言定义的整数。]/|代数幂(x,y),如果y是整数-常规功率(x,y)=||analyticPower(x,y)如果y不是整数\]-infty,0[*Z U[0,infty]*[-infty,infty]\{(1,+/-infty)}[注释:存在此功能是因为许多现有程序依赖关于此类操作的存在。预计新项目将使用更好的分析能力和代数能力。常规功率为与1^infty、NaN0、1^NaN上的C99电源不兼容。不是这样的预计许多程序都依赖于这些C99属性。这个功能也可以被视为纯语言定义和因此可能会被从名单中撤回。]-erf x[-infty,infty]-erfc x[-infty,infty]