0
0

More than 1 year has passed since last update.

JavaScriptの数値二項演算の表

Last updated at Posted at 2022-06-06

InfinityやNaNを含めた場合での数値演算結果を確認するための表。

a + b

+ +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+0 +0 +0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
-0 +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+1 +1 +1 +2 +0 +1.5 +0.5 +3 -1 +Infinity -Infinity NaN
-1 -1 -1 +0 -2 -0.5 -1.5 +1 -3 +Infinity -Infinity NaN
+0.5 +0.5 +0.5 +1.5 -0.5 +1 +0 +2.5 -1.5 +Infinity -Infinity NaN
-0.5 -0.5 -0.5 +0.5 -1.5 +0 -1 +1.5 -2.5 +Infinity -Infinity NaN
+2 +2 +2 +3 +1 +2.5 +1.5 +4 +0 +Infinity -Infinity NaN
-2 -2 -2 -1 -3 -1.5 -2.5 +0 -4 +Infinity -Infinity NaN
+Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity NaN NaN
-Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity NaN -Infinity NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

Infinity + -InfinityNaNになる。

a - b

- +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+0 +0 +0 -1 +1 -0.5 +0.5 -2 +2 -Infinity +Infinity NaN
-0 -0 +0 -1 +1 -0.5 +0.5 -2 +2 -Infinity +Infinity NaN
+1 +1 +1 +0 +2 +0.5 +1.5 -1 +3 -Infinity +Infinity NaN
-1 -1 -1 -2 +0 -1.5 -0.5 -3 +1 -Infinity +Infinity NaN
+0.5 +0.5 +0.5 -0.5 +1.5 +0 +1 -1.5 +2.5 -Infinity +Infinity NaN
-0.5 -0.5 -0.5 -1.5 +0.5 -1 +0 -2.5 +1.5 -Infinity +Infinity NaN
+2 +2 +2 +1 +3 +1.5 +2.5 +0 +4 -Infinity +Infinity NaN
-2 -2 -2 -3 -1 -2.5 -1.5 -4 +0 -Infinity +Infinity NaN
+Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity +Infinity NaN +Infinity NaN
-Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity -Infinity NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

a * b

* +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+0 +0 -0 +0 -0 +0 -0 +0 -0 NaN NaN NaN
-0 -0 +0 -0 +0 -0 +0 -0 +0 NaN NaN NaN
+1 +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
-1 -0 +0 -1 +1 -0.5 +0.5 -2 +2 -Infinity +Infinity NaN
+0.5 +0 -0 +0.5 -0.5 +0.25 -0.25 +1 -1 +Infinity -Infinity NaN
-0.5 -0 +0 -0.5 +0.5 -0.25 +0.25 -1 +1 -Infinity +Infinity NaN
+2 +0 -0 +2 -2 +1 -1 +4 -4 +Infinity -Infinity NaN
-2 -0 +0 -2 +2 -1 +1 -4 +4 -Infinity +Infinity NaN
+Infinity NaN NaN +Infinity -Infinity +Infinity -Infinity +Infinity -Infinity +Infinity -Infinity NaN
-Infinity NaN NaN -Infinity +Infinity -Infinity +Infinity -Infinity +Infinity -Infinity +Infinity NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

Infinity * 0NaNになる。

a / b

/ +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+0 NaN NaN +0 -0 +0 -0 +0 -0 +0 -0 NaN
-0 NaN NaN -0 +0 -0 +0 -0 +0 -0 +0 NaN
+1 +Infinity -Infinity +1 -1 +2 -2 +0.5 -0.5 +0 -0 NaN
-1 -Infinity +Infinity -1 +1 -2 +2 -0.5 +0.5 -0 +0 NaN
+0.5 +Infinity -Infinity +0.5 -0.5 +1 -1 +0.25 -0.25 +0 -0 NaN
-0.5 -Infinity +Infinity -0.5 +0.5 -1 +1 -0.25 +0.25 -0 +0 NaN
+2 +Infinity -Infinity +2 -2 +4 -4 +1 -1 +0 -0 NaN
-2 -Infinity +Infinity -2 +2 -4 +4 -1 +1 -0 +0 NaN
+Infinity +Infinity -Infinity +Infinity -Infinity +Infinity -Infinity +Infinity -Infinity NaN NaN NaN
-Infinity -Infinity +Infinity -Infinity +Infinity -Infinity +Infinity -Infinity +Infinity NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

0 / 0Infinity / InfinityNaNになる。

a % b

% +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+0 NaN NaN +0 +0 +0 +0 +0 +0 +0 +0 NaN
-0 NaN NaN -0 -0 -0 -0 -0 -0 -0 -0 NaN
+1 NaN NaN +0 +0 +0 +0 +1 +1 +1 +1 NaN
-1 NaN NaN -0 -0 -0 -0 -1 -1 -1 -1 NaN
+0.5 NaN NaN +0.5 +0.5 +0 +0 +0.5 +0.5 +0.5 +0.5 NaN
-0.5 NaN NaN -0.5 -0.5 -0 -0 -0.5 -0.5 -0.5 -0.5 NaN
+2 NaN NaN +0 +0 +0 +0 +0 +0 +2 +2 NaN
-2 NaN NaN -0 -0 -0 -0 -0 -0 -2 -2 NaN
+Infinity NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
-Infinity NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

有限値のaに対し、a % Infinityaになる。

a ** b

** +0 -0 +1 -1 +0.5 -0.5 +2 -2 +Infinity -Infinity NaN
+0 +1 +1 +0 +Infinity +0 +Infinity +0 +Infinity +0 +Infinity NaN
-0 +1 +1 -0 -Infinity +0 +Infinity +0 +Infinity +0 +Infinity NaN
+1 +1 +1 +1 +1 +1 +1 +1 +1 NaN NaN NaN
-1 +1 +1 -1 -1 NaN NaN +1 +1 NaN NaN NaN
+0.5 +1 +1 +0.5 +2 +0.7071067811865476 +1.414213562373095 +0.25 +4 +0 +Infinity NaN
-0.5 +1 +1 -0.5 -2 NaN NaN +0.25 +4 +0 +Infinity NaN
+2 +1 +1 +2 +0.5 +1.4142135623730951 +0.7071067811865475 +4 +0.25 +Infinity +0 NaN
-2 +1 +1 -2 -0.5 NaN NaN +4 +0.25 +Infinity +0 NaN
+Infinity +1 +1 +Infinity +0 +Infinity +0 +Infinity +0 +Infinity +0 NaN
-Infinity +1 +1 -Infinity -0 +Infinity +0 +Infinity +0 +Infinity +0 NaN
NaN +1 +1 NaN NaN NaN NaN NaN NaN NaN NaN NaN

NaN ** 01に、1 ** InfinityNaNになる。これはMath.pow(a, b)と同じ。

(libcのmath.hpow(NAN, 0)でも1。しかし、libcではpow(1, NAN)pow(1, INFINITY)1になる。)

生成コード

bin-ops.js
const values = [+0, -0, +1, -1, +0.5, -0.5, +2, -2, Infinity, -Infinity, NaN];

const table = binOp => values.map(left => values.map(right => binOp(left, right)));
const toS = v => {
  if (Math.sign(v) === 1) return `\`+${v}\``;
  if (Math.sign(v) === -1) return `\`${v}\``;
  if (Object.is(v, +0)) return "`+0`";
  if (Object.is(v, -0)) return "`-0`";
  return `\`${v}\``;
}
const print = (table, op = " ") => {
  const head = `| \`${op}\` | ${values.map(v => `**${toS(v)}**`).join(" | ")} |`;
  const sep = `| :---: | ${values.map(v => " :---: ").join(" | ")} |`;
  const lines = table.map((line, i) => `| **${toS(values[i])}** | ${line.map(toS).join(" | ")} |`);
  return [head, sep, ...lines].join("\n") + "\n";
};

console.log(print(table((a, b) => a + b), "+"));
console.log(print(table((a, b) => a - b), "-"));
console.log(print(table((a, b) => a * b), "*"));
console.log(print(table((a, b) => a / b), "/"));
console.log(print(table((a, b) => a % b), "%"));
console.log(print(table((a, b) => a ** b), "**"));
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0