使用 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。
三角学有很多应用,例如确定射弹的轨迹或不同物体的高度和距离,因此,如果您正在编写模拟这些情况的代码,那么访问这些函数肯定会很有帮助。
当您想要使用径向和角度值绘制不同的元素时,这些函数也非常有用。假设您想以均匀的距离围绕一个较大的圆绘制一个圆图案。如果您读过 Envato Tuts+ 上的 PHP GD 形状教程,您可能还记得绘制任何形状都需要您以 x、y 坐标的形式传递坐标,但使用极坐标绘制圆形图案会更容易。
在这种情况下使用这些三角函数将帮助您使用 sin()
和 cos()
将极坐标转换为笛卡尔形式来绘制所需的图形。这是一个例子:
登录后复制
下图显示了上述 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。
登录后复制
其他有用的数学函数
四舍五入数字
还有许多其他重要的数学函数。您可以使用 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)
来帮助您确定集合或数组中的最低和最高值数字。这些函数可以接受不同类型的参数,例如两个数组和一个字符串。您应该查看文档以了解如何比较它们。
登录后复制
整数除法
您还可以使用 intdiv($dividend, $divisor)
函数在 PHP 中执行整数除法。在这种情况下,除法后仅返回商的整数部分。同样,您还可以使用 fmod($dividend, $divisor)
函数获得两个参数相除后的余数或模数。返回值的大小始终小于 $divisor
的大小。
还有一些其他有用的函数,例如 is_nan($value)
、is_finite($value)
和 is_infinite($val)
可用于确定该值是否为数字,如果是数字,则确定它是有限还是无限。请记住,PHP 认为任何太大而无法放入浮点数的值都是无限的。因此 is_finite()
将返回 true
100 阶乘,但 false
1000 阶乘。
在 PHP 中生成随机数
事实证明,随机数在许多情况下都非常有用。您可以使用它们为您的应用程序生成“随机”数据或在游戏中生成敌人实例等。记住这一点非常重要,我们在本节中讨论的函数都不会生成加密安全的随机数。这些功能仅适用于安全性不成问题的情况,例如向重复访问者显示随机问候文本或生成随机统计数据。
函数 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 次,并且有轻微波动。
登录后复制
这两个函数也有自己的种子函数,称为 srand()
和 mt_srand()
,为随机数生成器提供种子。您应该记住,您只在程序中调用 srand()
和 mt_srand()
一次。在每次调用 rand()
和 mt_rand()
之前调用它们每次都会给你相同的“随机”数字。
登录后复制
最终想法
PHP 附带了许多内置函数,可以满足您所有的日常计算需求。您可以使用这些函数自己进行稍微复杂的计算,例如 GCD、LCM 和阶乘。
使用这些函数时,您应该记住几件事。例如, floor()
和 ceil()
等函数返回的值是一个整数,但它仍然是一个浮点数。同样,所有三角函数都希望它们的角度以弧度为单位。如果您向它们传递一个您希望被视为度数度量的角度值,您将得到不正确的结果。因此,请务必检查文档中所有这些函数的返回值和预期参数。
以上就是使用 PHP 的内置数学函数探索三角学、随机数生成等的详细内容,更多请关注恰卡编程网(mip.qiaqa.com)其它相关文章!
推荐阅读
-
在Python中,将K添加到列元组列表中的最小元素
处理数据集涉及识别特定列中的最小值并通过添加常量值(K)来更新它。通过实施优化的解决方案,我们可以有效地执行此操作,这对于数据...
-
使用switch case语句编写的C程序,用于计算几何图形的面积
#includevoidmain(){intfig_code;floatside,base,length,...
-
如何使 C# 代码可重用?
要在C#中使代码可重用,请使用接口。接口定义属性、方法和事件,这些成员是接口的成员。接口只包含成员的声明。派生类负责定义成员。这通...
-
C# 中的覆盖和隐藏有什么区别?
方法隐藏在C#中也称为隐藏。父类的方法可供子类使用,无需在遮蔽中使用override关键字。子类有其自己版本的相同函数。在...
-
在Java中使用示例双倍longValue()函数
Java是一种强大的面向对象语言,可以对各种数据类型进行高度的控制和精确度。其中一种功能是doublelongValue(),...
-
如何在Java中定义JSON字段名称的命名约定?
TheFieldNamingPolicycanbeusedtodefineafewstandardnaming...
-
Servlet中的HttpSession接口
在JavaWeb开发领域,了解HttpSession接口是创建动态和响应式Web应用程序的关键。在本文中,我们将探讨...
-
使用while循环查找自然数之和的Java程序
自然数之和可以使用编程语言中的不同迭代语句来计算。迭代语句是执行一组特定代码行直到循环语句中的条件失败的语句。在本文中,我们将讨论...
-
我们可以将Java数组转换为列表吗?
我们可以使用Arrays.asList()方法轻松地将Java数组转换为List。语法publicstaticLi...
-
Java中如何在不使用任何外部库的情况下读取网页内容?
TheURLclassofthejava.netpackagerepresentsaUniformResour...