「JavaScript/演算子」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
||= と &&= は存在します。→‎特殊演算子: の節は演算子ではないものが多量に含まれている「何が演算子か?」のコラムを書くべきか?ほか
Ef3 (トーク | 投稿記録)
→‎剰余: プログラムを例示。IEEE754 の Remainder に定義された挙動。s/modulo/REMAINDER/
86 行
 
=== 剰余 ===
'''剰余演算子'''(じょうよえんざんし、''modulusREMAINDER operator'')は<code>%</code>です。<math>\cdots</math>やmod、rem、\、\\などではありません。割り算の余りを求めます。
 
<syntaxhighlight lang="javascript">
100 行
</syntaxhighlight>
 
ゼロ剰余(ゼロじょうよ、''moduloREMAINDER by zero'')は例外ではなく<code>NaN</code>を返します。
 
<syntaxhighlight lang="javascript">
106 行
</syntaxhighlight>
 
<code>''a'' % ''b''</code>は<code>''a'' - ''b'' * [[JavaScript/Math/ceiltrunc|Math.ceiltrunc]](''a'' / ''b'')</code>と等価です。
Perl や Ruby のように<code>''a'' - ''b'' * [[JavaScript/Math/floor|Math.floor]](''a'' / ''b'')</code>と等価ではありません。これは IEEE754 の Remainder に定義された挙動で C 言語の libm にある fmod() と同じ動作です
 
<syntaxhighlight lang="javascript">
const remainder = (a,b) => (a - b * Math.trunc(a/b));
for (let i = -1.2; i <= 1.2; i += 1.2)
for (let j = -1.3; j <= 1.3; j += 1.3)
console.log(`${i} % ${j}= ${i%j} (=${remainder(i,j)}), ${i} / ${j} = ${i / j}`);
/*
-1.2 % -1.3= -1.2 (=-1.2), -1.2 / -1.3 = 0.923076923076923
-1.2 % 0= NaN (=NaN), -1.2 / 0 = -Infinity
-1.2 % 1.3= -1.2 (=-1.2), -1.2 / 1.3 = -0.923076923076923
0 % -1.3= 0 (=0), 0 / -1.3 = 0
0 % 0= NaN (=NaN), 0 / 0 = NaN
0 % 1.3= 0 (=0), 0 / 1.3 = 0
1.2 % -1.3= 1.2 (=1.2), 1.2 / -1.3 = -0.923076923076923
1.2 % 0= NaN (=NaN), 1.2 / 0 = Infinity
1.2 % 1.3= 1.2 (=1.2), 1.2 / 1.3 = 0.923076923076923
*/
</syntaxhighlight>
 
除数は浮動小数点数でもかまいません(元々 Number は64ビット倍精度浮動小数点数です)。
<syntaxhighlight lang="javascript">
const theta = Math.PI / 4;
alert(Math.sin(theta)===Math.sin(theta % (2 * Math.PI))); // true
</syntaxhighlight>
 
=== 単項マイナス ===