【PHP8.x】tan関数の使い方

tan関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

tan関数は、指定された数値のタンジェント(正接)を計算する関数です。この関数は、引数としてラジアン単位の角度を浮動小数点数(float)で受け取り、その角度のタンジェント値を浮動小数点数で返します。タンジェントは、数学における基本的な三角関数の一つであり、直角三角形において、一つの鋭角の対辺の長さを隣辺の長さで割った比率として定義されます。

例えば、π/4ラジアン(これは45度に相当します)のタンジェントは1.0となります。PHPでは、円周率を定数 M_PI で利用できますので、tan(M_PI / 4) と記述することで、この計算を実行できます。もし、度数法で角度が与えられている場合は、deg2rad() 関数を使用して度数をラジアンに変換してから tan() 関数に渡す必要があります。例えば、tan(deg2rad(45)) とすることで、45度のタンジェントを計算できます。

この関数は、幾何学的な計算、グラフ描画、物理シミュレーションなど、角度と比率を扱う様々な場面で利用され、正確な三角関数計算を効率的に行うことができます。

構文(syntax)

1<?php
2echo tan(M_PI_4);
3?>

引数(parameters)

float $num

PHP:

  • float $num: 角度(ラジアン)を指定する浮動小数点数

戻り値(return)

float

引数で与えられた数値のタンジェント(正接)を浮動小数点数(float)で返します。

サンプルコード

PHPで度数からタンジェントを計算する

1<?php
2
3/**
4 * 指定された度数のタンジェント(正接)を計算します。
5 * PHPのtan関数はラジアン単位の角度を期待するため、
6 * 度数をラジアンに変換してから計算を行います。
7 *
8 * @param float $degrees 計算したい角度(度数単位、例: 45.0)
9 * @return float 指定された角度のタンジェント値
10 */
11function calculateTangentFromDegrees(float $degrees): float
12{
13    // 度数をラジアンに変換します。
14    // PHPのtan関数は引数としてラジアン単位の角度を必要とします。
15    // deg2rad()関数は度数(degrees)をラジアン(radians)に変換します。
16    $radians = deg2rad($degrees);
17
18    // tan関数を使ってタンジェントを計算します。
19    $tangentValue = tan($radians);
20
21    return $tangentValue;
22}
23
24// --- 使用例 ---
25
26// 例1: 45度のタンジェントを計算
27// tan(45度) は 1 になります。
28$degrees1 = 45.0;
29$result1 = calculateTangentFromDegrees($degrees1);
30echo "{$degrees1}度のタンジェント: " . $result1 . PHP_EOL;
31
32// 例2: 0度のタンジェントを計算
33// tan(0度) は 0 になります。
34$degrees2 = 0.0;
35$result2 = calculateTangentFromDegrees($degrees2);
36echo "{$degrees2}度のタンジェント: " . $result2 . PHP_EOL;
37
38// 例3: 30度のタンジェントを計算
39$degrees3 = 30.0;
40$result3 = calculateTangentFromDegrees($degrees3);
41echo "{$degrees3}度のタンジェント: " . $result3 . PHP_EOL;
42
43// 例4: 90度のタンジェントを計算 (数学的には定義されませんが、非常に大きな値になります)
44$degrees4 = 90.0;
45$result4 = calculateTangentFromDegrees($degrees4);
46echo "{$degrees4}度のタンジェント: " . $result4 . PHP_EOL;
47
48// 補足: 直接ラジアンをtan関数に渡す場合
49// M_PI_4 は円周率πを4で割った値で、45度ラジアンに相当します。
50$radiansDirect = M_PI_4; // 45度
51$tangentDirect = tan($radiansDirect);
52echo "円周率π/4 ラジアン (45度) のタンジェント: " . $tangentDirect . PHP_EOL;

PHPのtan関数は、指定された角度のタンジェント(正接)を計算する際に使用されます。この関数は主に数学的な計算や、幾何学、物理学に関連するプログラミングで活用されます。

tan関数の引数 $num は、ラジアン単位の角度を指定する必要があります。引数と戻り値の型はどちらもfloat(浮動小数点数)です。もし度数(例: 45度)で角度を扱いたい場合は、直接tan関数に渡すのではなく、PHPが提供するdeg2rad()関数を使って度数をラジアンに変換してからtan関数に渡す必要があります。これにより、正確なタンジェント値を得ることができます。

提供されたサンプルコードでは、calculateTangentFromDegreesという関数を定義し、度数単位の角度を引数として受け取り、内部でdeg2rad()関数を用いてラジアンに変換後、tan関数でタンジェントを計算してその値を返しています。例えば、45度のタンジェントは1に、0度のタンジェントは0になります。90度のように数学的にタンジェントが定義されない(無限大に近づく)場合、PHPは非常に大きな浮動小数点数を返します。また、M_PI_4(円周率π/4、つまり45度ラジアン)のようなラジアン単位の定数を直接tan関数に渡すことも可能です。

PHPのtan関数は、引数としてラジアン単位の角度を期待します。一般的に使われる度数(degrees)でタンジェントを計算したい場合は、deg2rad()関数を使って度数をラジアンに変換してからtan関数に渡してください。この単位変換を忘れると、計算結果が全く異なる値となるため注意が必要です。また、数学的にタンジェントが定義されない90度や270度などの角度を計算すると、PHPでは非常に大きな浮動小数点数が結果として返されます。これは数学的な無限大を表す近似値として扱われることを理解しておくことが重要です。直接ラジアン値を渡す場合は、円周率定数M_PIなどを活用することもできます。

PHP tan() 関数の単体テストを実行する

1<?php
2
3/**
4 * 浮動小数点数の比較に用いる許容誤差。
5 * 浮動小数点数は正確な値を表現できない場合があるため、直接等号(==)で比較せず、
6 * 差がこの値より小さいかどうかで「ほぼ等しい」と判断します。
7 */
8const EPSILON = 0.000001;
9
10/**
11 * PHPのtan()関数のシンプルな単体テストを実行します。
12 *
13 * この関数は、既知の入力値と期待される出力値のペアを用いて、
14 * tan()関数の動作が正しいかを検証します。
15 * 浮動小数点数の比較には、EPSILON定数で定義された許容誤差を使用します。
16 */
17function runSimpleTanTests(): void
18{
19    echo "--- tan() 関数の単体テスト開始 ---\n";
20
21    // テストケースの定義: [入力値 (ラジアン) => 期待される出力値]
22    // PHPのtan()はラジアン単位の角度を引数に取ります。
23    $testCases = [
24        0.0     => 0.0,      // tan(0) = 0
25        M_PI_4  => 1.0,      // tan(π/4 ラジアン、つまり45度) = 1
26        -M_PI_4 => -1.0,     // tan(-π/4 ラジアン、つまり-45度) = -1
27        // M_PI_4 は PHP の組み込み定数で、pi()/4 の値です。
28        // 注意: tan(M_PI_2) のように90度(π/2ラジアン)は無限大に発散するため、
29        // 浮動小数点数のテストとしては不適切です。
30    ];
31
32    $passedCount = 0;
33    $totalCount = 0;
34
35    foreach ($testCases as $input => $expected) {
36        $totalCount++;
37        $actual = tan($input); // tan()関数を呼び出し、実際の結果を取得
38
39        // 浮動小数点数を比較する際は、直接 == を使わず、差が許容誤差内かを確認します。
40        if (abs($actual - $expected) < EPSILON) {
41            echo "テスト {$totalCount}: tan({$input}) = 期待値 {$expected}, 実際値 {$actual} - [成功]\n";
42            $passedCount++;
43        } else {
44            echo "テスト {$totalCount}: tan({$input}) = 期待値 {$expected}, 実際値 {$actual} - [失敗] (差: " . abs($actual - $expected) . ")\n";
45        }
46    }
47
48    echo "--- テスト結果 ---\n";
49    echo "成功: {$passedCount} / {$totalCount}\n";
50    echo "失敗: " . ($totalCount - $passedCount) . " / {$totalCount}\n";
51    echo "--- tan() 関数の単体テスト終了 ---\n";
52}
53
54// テスト関数を実行します。
55runSimpleTanTests();
56

PHPのtan関数は、引数として与えられた浮動小数点数(ラジアン単位の角度)の正接(タンジェント)を計算し、その結果を浮動小数点数で返す組み込み関数です。

このサンプルコードは、tan関数の基本的な動作を検証するための単体テストを示しています。コードではまず、EPSILON定数で浮動小数点数比較のための許容誤差を定義しています。これは、浮動小数点数が内部で厳密な値を表現できない場合があるため、直接==で比較する代わりに、差がこの誤差範囲内であるかを判定する一般的な手法です。

runSimpleTanTests関数内では、0.0M_PI_4(約0.785ラジアン、45度)など、既知の入力値と期待されるtan関数の出力値をペアとして定義しています。それぞれの入力値に対してtan関数を呼び出し、得られた実際の結果と期待値との差がEPSILONよりも小さい場合にテストを「成功」と判定しています。このように、単体テストを通じて関数の正しい挙動を確認し、浮動小数点数を扱う際の注意点も学べます。

このサンプルコードは、PHPのtan()関数が引数をラジアン単位で受け取る点、そして浮動小数点数の比較における注意点を学ぶ上で重要です。浮動小数点数は内部的に誤差を含むため、直接==で比較せず、EPSILONで定義された許容誤差内で「ほぼ等しい」と判断する手法を常に活用してください。また、tan(π/2)のように結果が無限大に発散するケースは、浮動小数点数では正確に扱えないため、テスト対象から適切に除外する必要があります。単体テストは、関数の正しい動作確認や、予期せぬ挙動を早期に発見するために非常に役立ちます。

関連コンテンツ