コードでの立方根
Unicodeエスケープ、HTMLエンティティ、LaTeX、そしてJavaScript、Python、Excelなど数種類の言語で実際に立方根を計算する関数まで。 負の数における平方根との違いも解説します。
Unicodeエスケープ & HTMLエンティティ
∛はUnicodeコードポイントU+221Bです。ほとんどの言語では、生の文字を貼り付ける代わりにエスケープシーケンスを使って文字列リテラルに 直接組み込めます。√と違い、名前付きのHTMLエンティティはなく、数値形式のみです。
"\u221B" // ∛"\u221b" # ∛"\u221B" // ∛∛(名前付きエンティティなし)content: "\221B";LaTeX
\sqrtはLaTeX、MathJax、KaTeXで、引数の上にバーがついた正しい根号を表示します — 角括弧の3があるかどうかが、立方根と平方根の違いです。
\sqrt[3]{x}\sqrt{x}\sqrt[n]{x}コードで立方根を計算する
エスケープシーケンスは画面に記号を表示するだけで、何も計算しません。ここでは各言語での実際の関数や数式と、27と-27に対する結果を 紹介します。立方根は、負の数の入力が実際に意味を持つ数少ない演算の1つだからです。
Math.cbrt(27);
// 3
Math.cbrt(-27);
// -3 — 正しく計算できる(Math.powとは違う)27 ** (1/3)
# 3.0
(-27) ** (1/3)
# 複素数になる!下の注意点を参照=SIGN(A1)*ABS(A1)^(1/3)Math.cbrt(27);
// 3.0
Math.cbrt(-27);
// -3.0 — 正しく計算できる#include <math.h>
cbrt(27);
// 3
cbrt(-27);
// -3 — 正しく計算できるpow(27, 1/3);
// 3
pow(-27, 1/3);
// NAN — 下の注意点を参照SELECT CBRT(27);
-- 3
SELECT CBRT(-27);
-- -3、正しく計算できるSELECT SIGN(27) * POWER(ABS(27), 1.0/3);
-- 3(組み込みのCBRTはなし)import Foundation
cbrt(27.0)
// 3.0 — .cubeRoot()メソッドは存在しないsign(-27) * abs(-27)^(1/3)
# -3(組み込みのcbrt()はなし)知っておくべき注意点
負の数:立方根と平方根はまったく異なる挙動をする
負の数の立方根は実数です(∛-27 = -3)。これは負の数の平方根が虚数になるのとは対照的です。しかし、ほとんどの言語の単純なx ** (1/3)はそれを理解していません — JavaScriptのMath.pow(-27, 1/3)はNaNを返し、Pythonの(-27) ** (1/3)は-3ではなく複素数を返します。JavaScriptのMath.cbrt()、JavaのMath.cbrt()、Cのcbrt()のような専用関数は正しく計算できますが、汎用の累乗演算子は通常そうではありません。
Pythonの**演算子は負の底に対して複素数を返す
Pythonで(-27) ** (1/3)を計算しても、エラーになったり-3が返ったりはしません — (1.5+2.598j)のような複素数が返されます。これは、Pythonの**が負の底を整数でない指数で累乗するとき、複素数演算にフォールバックするためです。math.pow(-27, 1/3)はまた違う挙動で、ValueErrorを発生させます。実数の-3を得るには、math.copysign(abs(x) ** (1/3), x)を使うか、専用のヘルパー関数を書いてください。
ExcelとGoogle SheetsにはCBRT関数がない
どちらのアプリにも組み込みの立方根の数式はありません。=A1^(1/3)は正の数では使えますが、負の数では#NUM!エラーになります。両方を正しく処理できる数式は=SIGN(A1)*ABS(A1)^(1/3)です — 絶対値の立方根を計算してから、元の符号を掛け合わせます。
Swiftに.cubeRoot()メソッドはない
Doubleには組み込みの.squareRoot()メソッドがあります(25.0.squareRoot())が、立方根に対応する.cubeRoot()は存在しません — 代わりにFoundationをインポートして、グローバル関数のcbrt()を呼び出す必要があります(cbrt(27.0))。
SQLの方言によってCBRTの有無が異なる
PostgreSQLには負の数も正しく処理できる組み込みのCBRT()関数があります。しかしMySQLとSQL Serverにはまったく存在しません — 表計算ソフトと同じように、POWER()とSIGN()を組み合わせて自作する必要があります。
記号そのものだけが必要ですか?
コピー形式のページには、プレーンテキスト、Unicodeコードポイント、表計算ソフトの数式として、すぐに貼り付けられる∛が用意されています — コードエディタは不要です。
コピー形式を開くよくある質問
コード内で立方根記号を表すUnicodeエスケープは何ですか?
JavaScript、Java、C#の文字列リテラルでは\u221B(大文字のB)を使います。Pythonでは\u221bを使います。どちらも同じ文字∛、つまり平方根記号(U+221A)の1つ次のUnicodeコードポイントU+221Bになります。
JavaScriptで立方根を計算するにはどうすればいいですか?
Math.cbrt(x)を使います — 例えばMath.cbrt(27)は3を返します。Math.sqrt()と違い、負の数も正しく処理できます。Math.cbrt(-27)は-3を返します。Math.pow(x, 1/3)を代わりに使うのはやめてください — Math.pow(-27, 1/3)はNaNを返します。負の数の立方根が定義できることを認識していないためです。
Pythonで立方根を計算するにはどうすればいいですか?
正の数であれば、27 ** (1/3)やmath.pow(27, 1/3)のどちらも3.0を返します。負の数だと厄介です。(-27) ** (1/3)は-3ではなく複素数を返し、math.pow(-27, 1/3)はValueErrorを発生させます。符号にかかわらず実数の結果を得るには、math.copysign(abs(x) ** (1/3), x)を使ってください。
ExcelやGoogle Sheetsで立方根を求める数式は何ですか?
どちらにも組み込みのCBRT関数はありません。=SIGN(A1)*ABS(A1)^(1/3)を使ってください。正の数、負の数どちらにも対応できます。単純な=A1^(1/3)は正の数では使えますが、負の数では#NUM!エラーになります。
立方根のLaTeXコマンドは何ですか?
\sqrt[3]{x}は、指数の位置に小さな3が入り、xの上にバーがついた根号を表示します。角括弧の数字を外した\sqrt{x}は、単純な平方根になります。LaTeX、MathJax、KaTeXで使用できます。
なぜMath.pow(-27, 1/3)はエラーではなくNaNを返すのですか?
Math.pow()(および多くのC系言語の同等の関数)は対数を使って汎用的に累乗を計算しますが、対数は負の底に対して定義されていません。そのため、実は実数として答えが定義できるケース(立方根)であっても、それを認識せずにNaNを返してしまいます。Math.cbrt()、JavaのMath.cbrt()、Cのcbrt()のような専用の立方根関数は別に実装されており、負の数を正しく処理できます。