語(yǔ)法:
MultiplicativeExpression : UnaryExpression MultiplicativeExpression * UnaryExpression MultiplicativeExpression / UnaryExpression MultiplicativeExpression % UnaryExpression
語(yǔ)義:
產(chǎn)生式 MultiplicativeExpression : 'MultiplicativeExpression'@ 'UnaryExpression, 其中 @ 表示上面定義中的運(yùn)算符之一,按照下面的過(guò)程執(zhí)行 :
- 令 left 為解釋執(zhí)行 MultiplicativeExpression 的結(jié)果 .
- 令 leftValue 為 GetValue(left).
- 令 right 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
- 令 rightValue 為 GetValue(right).
- 令 leftNum 為 ToNumber(leftValue).
- 令 rightNum 為 ToNumber(rightValue).
- 返回將特定運(yùn)算符 (*, /, or %) 作用于 leftNum 和 rightNum 的結(jié)果。參見(jiàn) 11.5.1, 11.5.2, 11.5.3 后的注解。
使用 * 運(yùn)算符
*運(yùn)算符表示乘法,產(chǎn)生操作數(shù)的乘積。乘法運(yùn)算滿足交換律。因?yàn)榫葐?wèn)題,乘法不總是滿足結(jié)合律。
浮點(diǎn)數(shù)的乘法遵循IEEE 754二進(jìn)制雙精度幅度浮點(diǎn)算法規(guī)則:
- 若兩個(gè)操作數(shù)之一為NaN,結(jié)果為NaN。
- 假如兩個(gè)操作數(shù)的正負(fù)號(hào)相同,結(jié)果就是正的,如果不同就是負(fù)的。
- 無(wú)窮大被零乘結(jié)果是NaN。
- 無(wú)窮大被無(wú)窮大乘結(jié)果就是無(wú)窮大。符號(hào)按照前面說(shuō)過(guò)的規(guī)則決定。
- 無(wú)窮大被有窮的非零值乘結(jié)果是帶正負(fù)號(hào)的無(wú)窮大。符號(hào)仍然按照前面說(shuō)過(guò)的規(guī)則決定。
- 其它情況下,既沒(méi)有無(wú)窮大也沒(méi)有NaN參與運(yùn)算,結(jié)果計(jì)算出來(lái)后會(huì)按照IEEE 754 round-to-nearest模式取到最接近的能表示的數(shù)。如果值過(guò)大不能表示,則結(jié)果為相應(yīng)的正負(fù)無(wú)窮大。如果值過(guò)小不能表示,則結(jié)果為相應(yīng)的正負(fù)零。ECMAScript要求支持IEEE 754規(guī)定的漸進(jìn)下溢。
使用 / 運(yùn)算符
/運(yùn)算符表示除法,產(chǎn)生操作數(shù)的商。左操作數(shù)是被除數(shù),右操作數(shù)是除數(shù)。ECMAScript不支持整數(shù)除法。所有除法運(yùn)算的操作數(shù)和結(jié)果都是雙精度浮點(diǎn)數(shù)。浮點(diǎn)數(shù)的除法遵循IEEE 754二進(jìn)制雙精度幅度浮點(diǎn)算法規(guī)則:
- 若兩個(gè)操作數(shù)之一為NaN,結(jié)果為NaN。
- 假如兩個(gè)操作數(shù)的正負(fù)號(hào)相同,結(jié)果就是正的,如果不同就是負(fù)的。
- 無(wú)窮大被零乘結(jié)果是NaN。
- 無(wú)窮大被無(wú)窮大除結(jié)果是NaN。
- 無(wú)窮大被零除結(jié)果是無(wú)窮大。符號(hào)按照前面說(shuō)過(guò)的規(guī)則決定。
- 無(wú)窮大被非零有窮的值除結(jié)果是有正負(fù)號(hào)的無(wú)窮大。符號(hào)按照前面說(shuō)過(guò)的規(guī)則決定。
- 有窮的非零值被無(wú)窮大除結(jié)果是零。符號(hào)按照前面說(shuō)過(guò)的規(guī)則決定。
- 零被零除結(jié)果是NaN;零被其它有窮數(shù)除結(jié)果是零,符號(hào)按照前面說(shuō)過(guò)的規(guī)則決定。
- 有窮的非零值被零除結(jié)果是有正負(fù)號(hào)的無(wú)窮大。符號(hào)按照前面說(shuō)過(guò)的規(guī)則決定。
- 其它情況下,既沒(méi)有無(wú)窮大也沒(méi)有NaN參與運(yùn)算,結(jié)果計(jì)算出來(lái)后會(huì)按照IEEE 754 round-to-nearest模式取到最接近的能表示的數(shù)。如果值過(guò)大不能表示,則結(jié)果為相應(yīng)的正負(fù)無(wú)窮大。如果值過(guò)小不能表示,則結(jié)果為相應(yīng)的正負(fù)零。ECMAScript要求支持IEEE 754規(guī)定的漸進(jìn)下溢。
使用 % 運(yùn)算符
%運(yùn)算符產(chǎn)生其運(yùn)算符在除法中的余數(shù)。左操作數(shù)是被除數(shù),右操作數(shù)是除數(shù)。
在C和C++中,余數(shù)運(yùn)算符只接受整數(shù)為操作數(shù);在ECMAScript,它還接受浮點(diǎn)操作數(shù)。
浮點(diǎn)數(shù)使用%運(yùn)算符的余數(shù)運(yùn)算與IEEE 754所定義的"remainder"運(yùn)算不完全相同。IEEE 754 “remainder”運(yùn)算做鄰近取整除法的余數(shù)計(jì)算,而不是舍尾除法,這樣它的行為跟通常意義上的整數(shù)余數(shù)運(yùn)算符行為不一致。而ECMAScript語(yǔ)言定義浮點(diǎn)操作%為與Java取余運(yùn)算符一致;可以參照C庫(kù)中的函數(shù)fmod。
ECMAScript浮點(diǎn)數(shù)的取余法遵循IEEE 754二進(jìn)制雙精度幅度浮點(diǎn)算法規(guī)則:
- 若兩個(gè)操作數(shù)之一為NaN,結(jié)果為NaN。
- 結(jié)果的符號(hào)等于被除數(shù)。
- 若被除數(shù)是無(wú)窮大或者除數(shù)是零,或者兩者皆是,結(jié)果就是NaN。
- 若被除數(shù)有窮而除數(shù)為無(wú)窮大,結(jié)果為被除數(shù)。
- 若被除數(shù)為零且除數(shù)非零且有窮,結(jié)果與被除數(shù)相同。
- 其它情況下,既沒(méi)有0,無(wú)窮大也沒(méi)有NaN參與運(yùn)算,從被除數(shù)n和除數(shù)d得到浮點(diǎn)數(shù)余數(shù)r以數(shù)學(xué)關(guān)系式 r = n ? (d × q) 定義,其中q是個(gè)整數(shù),在n/d為負(fù)時(shí)為負(fù),在n/d為正時(shí)為正,它應(yīng)該在不超過(guò)n和d的商的前提下盡可能大。結(jié)果計(jì)算出來(lái)后會(huì)按照IEEE 754 round-to-nearest模式取到最接近的能表示的數(shù)。
更多建議: