基础数学在编程过程中被大量使用。在编写代码时,我们需要经常对不同的值进行比较、加法、乘法、减法和除法。
有时,程序中所需的数学可能会涉及更多。您可能需要使用对数、三角函数或指数函数。在本教程中,我将通过示例讨论如何在 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()并且acos()只能接受 -1 到 1 范围内的值作为有效参数。超出此范围的值将为您提供 NaN。
三角学有很多应用,例如确定射弹的轨迹或不同物体的高度和距离,因此如果您正在编写模拟这些情况的代码,访问这些函数肯定会很有帮助。
当您想使用径向和角度值绘制不同的元素时,这些函数也非常有用。假设您想以均匀的距离围绕一个较大的圆圈绘制一个圆圈图案。
在这种情况下使用这些三角函数将帮助您绘制所需的图形,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 还有一些指数和对数函数。该exp($value)函数将返回提高到 float 幂的const ant e$value。log($arg, $base)同样,您可以使用该函数计算给定数字对任何底的对数。如果$base省略 ,则将使用自然底数e计算对数。如果你想计算一个以 10 为底的对数,你可以简单地使用函数log10($arg).
您可能会发现另一个有用的函数是,它pow($base, $exp)返回. 你们中的一些人可能更喜欢使用运算符。该表达式将给出与 相同的结果。但是,在某些情况下,您可能会得到不正确的结果。例如,会给你-1,这是不正确的。使用计算相同的表达式 将给出正确的值,NaN。$base$exp**$a**$bpow($a, $b)$a**$b-1**0.5pow(-1, 0.5)
<?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 ?>
其他有用的数学函数
四舍五入的数字
还有许多其他重要的数学函数。您可以使用该函数将分数或小数四舍五入到最接近的整数。这会将 2.1 和 2.9 都转换为 3。同样,您可以使用该函数ceil(float $value)将分数或小数四舍五入到最接近的整数。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)函数获得两个参数相除后的余数或模数。返回的值将始终小于$divisorin 大小。
还有一些其他有用的函数,如is_nan($value), is_finite($value),is_infinite($val) 可用于确定值是否为数字,如果是数字,则确定它是有限的还是无限的。请记住,PHP 认为任何太大而无法放入浮点数的值都是无限的。所以 is_finite()将返回true100 阶乘但false1000 阶乘。
在 PHP 中生成随机数
随机数在许多情况下被证明是非常有用的。您可以使用它们为您的应用程序生成“随机”数据或在游戏中生成敌人实例等。重要的是要记住,我们在本节中讨论的任何函数都不会生成加密安全的随机数。这些功能仅适用于安全不是问题的情况,例如向重复访问者显示随机问候文本或生成随机统计数据。
函数rand($min, $max)和可以在给定值(包括和值)mt_rand($min, $max)之间生成正随机整数。当函数在没有任何参数的情况下被调用时,它们会生成 0 到 之间的随机数。您可以查看这些函数可以在您的平台上生成的最大可能随机数的值。$min$maxgetrandmax()echogetrandmax()
该函数mt_rand()比 快 4 倍,如果小于rand()则返回 false 。从 PHP 7.1.0 开始,实际上已将. 唯一的区别是,如果小于保持向后兼容性,它仍然不会给出错误。$max$minrand()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()是ceil()一个整数,但它仍然是一个浮点数。同样,所有三角函数都期望它们的角度以弧度给出。如果您向他们传递一个您希望被视为度数度量的角度值,您将得到不正确的结果。因此,请务必检查文档中所有这些函数的返回值和预期参数。
- 四舍五入的数字
- 最小值和最大值
- 整数除法