JavaScriptで二次方程式の解を実装する方法【判別式で実数解を判定】
本記事では、3つの数値(二次方程式における二次の項の係数・一次の項の係数・定数項)を引数として受け取るJavaScript関数の作成方法を解説します。
この関数は、方程式が実数解を持つ場合はその解を返し、実数解が存在しない場合にはfalseを返す必要があります。
二次方程式の解法の基本
二次方程式 ax² + bx + c = 0 の解は、以下の解の公式から求めることができます。
x = (-b ± √(b² − 4ac)) / 2a
ここで重要になるのが「判別式」と呼ばれる b² − 4ac の値です。判別式の符号によって、解の性質は次のように決まります。
- 判別式 > 0:異なる2つの実数解を持つ
- 判別式 = 0:重解(1つの実数解)を持つ
- 判別式 < 0:実数解を持たない(虚数解となるため false を返す)
サンプルコード
実際のコードは以下のとおりです。
const coeff = [1, 12, 3];
const findRoots = co => {
const [a, b, c] = co;
const discriminant = (b * b) - 4 * a * c;
// 実数解が存在しない場合
if(discriminant < 0){
return false;
};
const d = Math.sqrt(discriminant);
const x1 = (d - b) / (2 * a);
const x2 = ((d + b) * -1) / (2 * a);
return [x1, x2];
};
console.log(findRoots(coeff));コードのポイント
- 分割代入: 配列から係数 a、b、c を簡潔に取り出しています。
- 判別式の計算:
b * b - 4 * a * cを事前に求めておくことで、処理の流れが分かりやすくなります。 - Math.sqrt(): 判別式が0以上の場合のみ平方根を計算するため、エラーや NaN を避けられます。
実行結果
コンソールへの出力は以下のとおりです。
[ -0.2554373534619714, -11.744562646538029 ]
このように、係数 [1, 12, 3] に対して約 -0.255 と約 -11.745 の2つの実数解が正しく求められていることが確認できます。
-
JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説
JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>
-
JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方
JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時