LoginSignup
0

posted at

updated at

JavaScriptの数値二項演算の表

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), "**"));

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
What you can do with signing up
0