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 + -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 |
+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 * 0
はNaN
になる。
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 / 0
やInfinity / Infinity
はNaN
になる。
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 % Infinity
はa
になる。
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 ** 0
が1
に、1 ** Infinity
がNaN
になる。これはMath.pow(a, b)
と同じ。
(libcのmath.h
のpow(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), "**"));