内置 PHP 数学函数的三角学、随机数等

作者 : 慕源网 本文共5484个字,预计阅读时间需要14分钟 发布时间: 2021-09-14 共195人阅读

内置 PHP 数学函数的三角学、随机数等

在编程过程中会大量使用基础数学。我们在编写代码时需要经常比较、加、乘、减、除不同的值。

有时,程序中所需的数学可能更复杂。您可能需要使用对数、三角函数或指数函数。在本教程中,我将通过示例讨论如何在 PHP 中使用这些函数中的每一个。

本教程将向您介绍 PHP 中用于执行三角、幂和对数计算的内置数学函数。我们还将研究舍入和生成随机数。

PHP 中的三角函数

您可以在计算使用弧度给出正弦,余弦和不同角度的正切值sin($angle)cos($angle)tan($angle)。它们都返回float值,传递给它们的角度度量以弧度为单位。

这意味着当您简单地计算 时tan(45),您不会得到 1 作为输出,因为您实际上将计算 45 弧度处的切线值,大约为 2,578 度。幸运的是,PHP 有两个非常有用的函数可以将弧度转换为度数,反之亦然。这些函数是 rad2deg()deg2rad()。因此,如果您确实要计算 45 度的切线值,则必须编写tan(deg2rad(45)).

值得注意的是,没有直接的 PHP 函数来计算cosec()sec()、 或的值cot()。然而,这些值是只是倒数sin()cos()tan(),所以你仍然可以计算出它们的值是间接的。

您还可以进行逆运算并计算三角角具有特定值的角度。这些函数被调用asin()acos()atan()。您必须记住的一件事是,对于任何角度,sin 和 cos 的值永远不会超出 -1 到 1 的范围。这意味着asin()andacos()只能接受 -1 到 1 范围内的值作为有效参数。超出此范围的值将为您提供 NaN。

三角学有很多应用,例如确定弹丸的轨迹或不同物体的高度和距离,因此如果您正在编写模拟这些情况的代码,访问这些函数肯定会很有帮助。

当您想使用径向和角度值绘制不同的元素时,这些函数也非常有用。假设您想以均匀的距离围绕一个较大的圆绘制一个圆图案。如果您已阅读Envato Tuts+ 上的PHP GD Shapes 教程,您可能记得绘制任何形状都需要您以 x、y 坐标的形式传递坐标,但使用极坐标绘制圆形图案更容易。

使用在这种情况下,这些三角函数将帮助您使用绘制所需的数字sin()cos()对极坐标转换成直角坐标形式。下面是一个例子:

<?php
 
$image = imagecreatetruecolor(800, 600);
$bg = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg);
 
$radius = 80;
 
for($i = 0; $i < 12; $i++) {
    $col_ellipse = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200));
 
    imagefilledellipse($image, 175 + 125*cos(deg2rad($i*30)), 175 + 125*sin(deg2rad($i*30)), 3*$radius/4, 3*$radius/4, $col_ellipse);
    imageellipse($image, 175 + 125*cos(deg2rad($i*30)), 175 + 125*sin(deg2rad($i*30)), 3.5*$radius/4, 3.5*$radius/4, $col_ellipse);
 
    $col_ellipse = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200));
 
    imagefilledellipse($image, 575 + 150*cos(deg2rad($i*30)), 375 + 150*sin(deg2rad($i*30)), 3*$radius/4, 3*$radius/4, $col_ellipse);
    imageellipse($image, 575 + 150*cos(deg2rad($i*30)), 375 + 150*sin(deg2rad($i*30)), 3.5*$radius/4, 3.5*$radius/4, $col_ellipse);
}
 
$col_ellipse = imagecolorallocate($image, 255, 255, 255);
imagefilledellipse($image, 175, 175, 275, 275, $col_ellipse);
 
?>

下图显示了上述 PHP 代码的最终结果。

内置 PHP 数学函数的三角学、随机数等

指数和对数函数

PHP 也有一些指数和对数函数。该exp($value)函数将返回常数e的 float 次幂$value。同样,您可以使用该log($arg, $base)函数计算给定数字的任何底数的对数。如果$base省略,则将使用自然底数e计算对数。如果你想计算一个数以 10 为底的对数,你可以简单地使用函数log10($arg).

还有一个功能,你可能会发现有用的是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()将返回true100 阶乘,但返回false1000 阶乘。

在 PHP 中生成随机数

随机数被证明在许多情况下非常有用。您可以使用它们为您的应用程序生成“随机”数据或在游戏中生成敌人实例等。请务必记住,我们在本节中讨论的任何函数都不会生成加密安全的随机数。这些功能仅用于安全性不成问题的情况,例如向重复访问者显示随机问候文本或生成随机统计数据。

函数rand($min, $max)mt_rand($min, $max)可以在给定值之间生成正随机整数,包括$min$max值。当不带任何参数调用函数时,它们会生成 0 到 之间的随机数getrandmax()。您可以查看这些函数可以在您的平台上生成的最大可能随机数echo的值getrandmax()

该函数mt_rand()比 快 4 倍rand(),如果$max小于则返回 false $min。从 PHP 7.1.0 开始,rand()实际上已经成为mt_rand(). 唯一的区别是rand()如果$max小于$min保持向后兼容性仍然不会出错。

这是一个循环,用于生成 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()and之类的函数返回的值ceil()是一个整数,但它仍然是一个浮点数。类似地,所有三角函数都希望它们的角度以弧度给出。如果您向它们传递一个您希望被视为度数度量的角度值,您将得到不正确的结果。所以一定要检查文档中所有这些函数的返回值和预期参数。


慕源网 » 内置 PHP 数学函数的三角学、随机数等

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录