「JavaScript/演算子」の版間の差分
削除された内容 追加された内容
||= と &&= は存在します。→特殊演算子: の節は演算子ではないものが多量に含まれている「何が演算子か?」のコラムを書くべきか?ほか |
→剰余: プログラムを例示。IEEE754 の Remainder に定義された挙動。s/modulo/REMAINDER/ |
||
86 行
=== 剰余 ===
'''剰余演算子'''(じょうよえんざんし、''
<syntaxhighlight lang="javascript">
100 行
</syntaxhighlight>
ゼロ剰余(ゼロじょうよ、''
<syntaxhighlight lang="javascript">
106 行
</syntaxhighlight>
<code>''a'' % ''b''</code>は<code>''a'' - ''b'' * [[JavaScript/Math/
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>
=== 単項マイナス ===
|