阅读(3539) (0)

乘法运算符

2017-06-16 15:18:49 更新

 语法:

MultiplicativeExpression : UnaryExpression MultiplicativeExpression * UnaryExpression MultiplicativeExpression / UnaryExpression MultiplicativeExpression % UnaryExpression

 语义:

 产生式 MultiplicativeExpression : 'MultiplicativeExpression'@ 'UnaryExpression, 其中 @ 表示上面定义中的运算符之一,按照下面的过程执行 :

  1. 令 left 为解释执行 MultiplicativeExpression 的结果 .
  2. 令 leftValue 为 GetValue(left).
  3. 令 right 为解释执行 UnaryExpression 的结果 .
  4. 令 rightValue 为 GetValue(right).
  5. 令 leftNum 为 ToNumber(leftValue).
  6. 令 rightNum 为 ToNumber(rightValue).
  7. 返回将特定运算符 (*, /, or %) 作用于 leftNum 和 rightNum 的结果。参见 11.5.1, 11.5.2, 11.5.3 后的注解。

使用 * 运算符

 *运算符表示乘法,产生操作数的乘积。乘法运算满足交换律。因为精度问题,乘法不总是满足结合律。

 浮点数的乘法遵循IEEE 754二进制双精度幅度浮点算法规则:

  • 若两个操作数之一为NaN,结果为NaN。
  • 假如两个操作数的正负号相同,结果就是正的,如果不同就是负的。
  • 无穷大被零乘结果是NaN。
  • 无穷大被无穷大乘结果就是无穷大。符号按照前面说过的规则决定。
  • 无穷大被有穷的非零值乘结果是带正负号的无穷大。符号仍然按照前面说过的规则决定。
  • 其它情况下,既没有无穷大也没有NaN参与运算,结果计算出来后会按照IEEE 754 round-to-nearest模式取到最接近的能表示的数。如果值过大不能表示,则结果为相应的正负无穷大。如果值过小不能表示,则结果为相应的正负零。ECMAScript要求支持IEEE 754规定的渐进下溢。

使用 / 运算符

 /运算符表示除法,产生操作数的商。左操作数是被除数,右操作数是除数。ECMAScript不支持整数除法。所有除法运算的操作数和结果都是双精度浮点数。浮点数的除法遵循IEEE 754二进制双精度幅度浮点算法规则:

  • 若两个操作数之一为NaN,结果为NaN。
  • 假如两个操作数的正负号相同,结果就是正的,如果不同就是负的。
  • 无穷大被零乘结果是NaN。
  • 无穷大被无穷大除结果是NaN。
  • 无穷大被零除结果是无穷大。符号按照前面说过的规则决定。
  • 无穷大被非零有穷的值除结果是有正负号的无穷大。符号按照前面说过的规则决定。
  • 有穷的非零值被无穷大除结果是零。符号按照前面说过的规则决定。
  • 零被零除结果是NaN;零被其它有穷数除结果是零,符号按照前面说过的规则决定。
  • 有穷的非零值被零除结果是有正负号的无穷大。符号按照前面说过的规则决定。
  • 其它情况下,既没有无穷大也没有NaN参与运算,结果计算出来后会按照IEEE 754 round-to-nearest模式取到最接近的能表示的数。如果值过大不能表示,则结果为相应的正负无穷大。如果值过小不能表示,则结果为相应的正负零。ECMAScript要求支持IEEE 754规定的渐进下溢。

使用 % 运算符

 %运算符产生其运算符在除法中的余数。左操作数是被除数,右操作数是除数。

 在C和C++中,余数运算符只接受整数为操作数;在ECMAScript,它还接受浮点操作数。

 浮点数使用%运算符的余数运算与IEEE 754所定义的"remainder"运算不完全相同。IEEE 754 “remainder”运算做邻近取整除法的余数计算,而不是舍尾除法,这样它的行为跟通常意义上的整数余数运算符行为不一致。而ECMAScript语言定义浮点操作%为与Java取余运算符一致;可以参照C库中的函数fmod。

 ECMAScript浮点数的取余法遵循IEEE 754二进制双精度幅度浮点算法规则:

  • 若两个操作数之一为NaN,结果为NaN。
  • 结果的符号等于被除数。
  • 若被除数是无穷大或者除数是零,或者两者皆是,结果就是NaN。
  • 若被除数有穷而除数为无穷大,结果为被除数。
  • 若被除数为零且除数非零且有穷,结果与被除数相同。
  • 其它情况下,既没有0,无穷大也没有NaN参与运算,从被除数n和除数d得到浮点数余数r以数学关系式 r = n − (d × q) 定义,其中q是个整数,在n/d为负时为负,在n/d为正时为正,它应该在不超过n和d的商的前提下尽可能大。结果计算出来后会按照IEEE 754 round-to-nearest模式取到最接近的能表示的数。