ホームページ >バックエンド開発 >PHPチュートリアル >PHP の組み込み数学関数を使用して、三角法、乱数生成などを探索します。
基本的な数学はプログラミング プロセスで広範囲に使用されます。コードを記述するとき、さまざまな値を比較、加算、乗算、減算、除算することが必要になることがよくあります。
プログラムで必要な計算がより複雑になる場合があります。対数関数、三角関数、または指数関数を使用する必要がある場合があります。このチュートリアルでは、PHP の各関数の使用方法を例を挙げて説明します。
このチュートリアルでは、三角関数、指数関数、対数計算を実行するための PHP に組み込まれた数学関数を紹介します。丸めと乱数の生成についても見ていきます。
sin($angle)
、cos($angle)
、tan ( $angle)
. どちらも、ラジアン単位で渡された角度測定値とともに float
値を返します。
これは、単純に tan(45)
を計算すると、実際には 45 ラジアン、つまり約 2,578 度のタンジェント値を計算することになるため、出力として 1 は得られないことを意味します。幸いなことに、PHP には、ラジアンから度へ、またはその逆に変換するための 2 つの非常に便利な関数があります。これらの関数は rad2deg()
と deg2rad()
です。したがって、実際に 45 度のタンジェントを計算したい場合は、tan(deg2rad(45))
と記述する必要があります。
cosec()
、sec()
、または cot()
の値を計算する直接の PHP 関数はないことに注意してください。 、これらの値は sin()
、cos()
、tan()
の逆数であるため、これらの値を計算することができます。間接的に。
逆演算を実行して、特定の値を使用して三角形の角度を計算することもできます。これらの関数は、asin()
、acos()
、および atan()
と呼ばれます。覚えておく必要があるのは、sin と cos の値は、どの角度でも -1 から 1 の範囲外にはならないということです。これは、asin()
と acos()
は、有効な引数として -1 から 1 までの範囲の値のみを受け入れることができることを意味します。この範囲外の値を指定すると NaN が返されます。
三角法には、発射体の軌道やさまざまなオブジェクトの高さと距離の決定など、多くの応用例があるため、これらの状況をシミュレートするコードを作成する場合、これらの関数にアクセスできると間違いなく役立ちます。
これらの関数は、半径値と角度値を使用してさまざまな要素を描画する場合にも役立ちます。大きな円の周囲に等距離で円パターンを描画するとします。 Envato Tuts の PHP GD 形状チュートリアルを読んだことがあれば、形状を描画するには X、Y 座標の形式で座標を渡す必要があることを覚えているかもしれませんが、極座標を使用して円形のパターンを描画する方が簡単です。
この場合にこれらの三角関数を使用すると、sin()
と cos()
を使用して極座標をデカルト形式に変換し、目的のグラフを描画するのに役立ちます。以下に例を示します:
下の画像は、上記の PHP コードの最終結果を示しています。
PHP には、いくつかの指数関数と対数関数もあります。 exp($value)
この関数は、float $value で累乗した定数 e
を返します。同様に、log($arg, $base)
関数を使用して、指定された数値の任意の底に対する対数を計算できます。 $base
を省略した場合、対数の計算には自然底 e が使用されます。数値の底 10 の対数を計算したい場合は、関数 log10($arg)
を使用するだけです。
もう 1 つの便利な関数は、pow($base, $exp)
で、$base
の $exp
を返します。 **
演算子を使用します。式 $a**$b
は、pow($a, $b)
と同じ結果を返します。ただし、場合によっては、$a**$b
を使用すると、誤った結果が得られることがあります。たとえば、-1**0.5
では -1 が返されますが、これは誤りです。 pow(-1, 0.5)
を使用して同じ式を評価すると、正しい値 NaN が得られます。
<?php echo log(1000, M_E); // 6.9077552789821 echo log(1000); // 6.9077552789821 echo log(1000, 10); // 3 echo log10(1000); // 3 echo pow(121, -121); // 9.6154627930786E-253 echo pow(121, 121); // 1.0399915443694E+252 echo pow(121, 1331); // INF ?>
还有许多其他重要的数学函数。您可以使用 ceil(float $value)
函数将分数或小数四舍五入到最接近的整数。这会将 2.1 和 2.9 转换为 3。同样,您可以使用 floor(float $value)
函数将分数或小数舍入为最接近的整数。它将把 2.1 和 2.9 都更改为 2。
这些函数有助于轻松地对不同计算的结果进行舍入。假设您需要知道大厅可容纳多少人(根据其面积)。除法后的最终答案很可能是一个十进制数,但你不能将人分成分数,因此正确的答案将是计算值的下限值。
您经常需要将数字向上或向下舍入为最接近的整数。例如,您可能想要将 2.1 更改为 2,但将 2.9 更改为 3。这可以使用 round($value, $ precision, $mode)
函数轻松完成。 $ precision
参数确定要舍入的小数位数。默认值 0 将仅返回整数。第三个 $mode
参数用于确定如果要舍入的数字恰好位于中间会发生什么。您可以使用它来指定是否应将 3.5 更改为 3 或 4。
PHP 还有两个函数 min($values)
和 max($values)
来帮助您确定集合或数组中的最低和最高值数字。这些函数可以接受不同类型的参数,例如两个数组和一个字符串。您应该查看文档以了解如何比较它们。
<?php $hall_width = 120; $hall_length = 180; $per_person_area = 35; $hall_capacity = floor($hall_length*$hall_length/$per_person_area); // Output: The hall can only accommodate 925 people. echo 'The hall can only accommodate '.$hall_capacity.' people.'; $water_tank_volume = 548733; $bucket_volume = 305; $buckets_needed = ceil($water_tank_volume/$bucket_volume); // Output: We will need 1800 buckets of water to completely fill the tank. echo 'We will need '.$buckets_needed.' buckets of water to completely fill the tank.'; $marks = [49, 58, 93, 12, 30]; // Output: Minimum and maximum obtained marks in the exam are 12 and 93 respectively. echo 'Minimum and maximum obtained marks in the exam are '.min($marks).' and '.max($marks).' respectively.'; ?>
您还可以使用 intdiv($dividend, $divisor)
函数在 PHP 中执行整数除法。在这种情况下,除法后仅返回商的整数部分。同样,您还可以使用 fmod($dividend, $divisor)
函数获得两个参数相除后的余数或模数。返回值的大小始终小于 $divisor
的大小。
还有一些其他有用的函数,例如 is_nan($value)
、is_finite($value)
和 is_infinite($val)
可用于确定该值是否为数字,如果是数字,则确定它是有限还是无限。请记住,PHP 认为任何太大而无法放入浮点数的值都是无限的。因此 is_finite()
将返回 true
100 阶乘,但 false
1000 阶乘。
事实证明,随机数在许多情况下都非常有用。您可以使用它们为您的应用程序生成“随机”数据或在游戏中生成敌人实例等。记住这一点非常重要,我们在本节中讨论的函数都不会生成加密安全的随机数。这些功能仅适用于安全性不成问题的情况,例如向重复访问者显示随机问候文本或生成随机统计数据。
函数 rand($min, $max)
和 mt_rand($min, $max)
可以生成给定值之间的正随机整数,包括 $min
和 $max
值。当不带任何参数调用函数时,它们会生成 0 到 getrandmax()
之间的随机数。您可以 echo
getrandmax()
的值来查看这些函数在您的平台上可以生成的最大可能随机数。
函数 mt_rand()
比 rand()
快 4 倍,如果 $max
小于 $min
。从 PHP 7.1.0 开始,rand()
实际上已成为 mt_rand()
的别名。唯一的区别是,如果 $max
小于 $min
,则 rand()
仍然不会给出错误,以保持向后兼容性。
这是一个循环,用于生成 0 到 100 之间的随机值一百万次。正如您所看到的,值 0、50 和 100 大约生成了 10,000 次,并且有轻微波动。
<?php $rand_values = []; $sum = 0; $count = 1000000; for($i = 0; $i < $count; $i++) { $rand_values[$i] = mt_rand(0, 100); $sum += $rand_values[$i]; } $count_frequency = array_count_values($rand_values); // Output: 100 was randomly generated 9969 times. echo '100 was randomly generated '.$count_frequency[100].' times.'; // Output: 50 was randomly generated: 9994 times. echo '50 was randomly generated: '.$count_frequency[50].' times.'; // Output: 0 was randomly generated: 10010 times. echo '0 was randomly generated: '.$count_frequency[0].' times.'; // Output: Average of random values: 49.97295 echo 'Average of random values: '.($sum/$count); ?>
这两个函数也有自己的种子函数,称为 srand()
和 mt_srand()
,为随机数生成器提供种子。您应该记住,您只在程序中调用 srand()
和 mt_srand()
一次。在每次调用 rand()
和 mt_rand()
之前调用它们每次都会给你相同的“随机”数字。
<?php srand(215); echo rand()."\n"; // 330544099 srand(215); echo rand()."\n"; // 330544099 srand(215); echo rand()."\n"; // 330544099 echo rand()."\n"; // 138190029 echo rand()."\n"; // 1051333090 echo rand()."\n"; // 1219572487 ?>
PHP 附带了许多内置函数,可以满足您所有的日常计算需求。您可以使用这些函数自己进行稍微复杂的计算,例如 GCD、LCM 和阶乘。
これらの関数を使用する際には、留意すべき点がいくつかあります。たとえば、floor()
や ceil()
などの関数によって返される値は整数ですが、浮動小数点数のままです。同様に、すべての三角関数は角度がラジアンであることを期待します。度単位として処理したい角度値を渡すと、不正確な結果が得られます。したがって、これらすべての関数の戻り値と予期されるパラメーターについては、必ずドキュメントを確認してください。
以上がPHP の組み込み数学関数を使用して、三角法、乱数生成などを探索します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。