• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

带有内置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()并且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数学函数的三角函数、随机数等  第1张

指数和对数函数

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()一个整数,但它仍然是一个浮点数。同样,所有三角函数都期望它们的角度以弧度给出。如果您向他们传递一个您希望被视为度数度量的角度值,您将得到不正确的结果。因此,请务必检查文档中所有这些函数的返回值和预期参数。


文章目录
  • PHP中的三角函数
  • 指数和对数函数
  • 其他有用的数学函数
    • 四舍五入的数字
    • 最小值和最大值
    • 整数除法
  • 在 PHP 中生成随机数
  • 最后的想法