php的sin、cos等三角函数参数必须为弧度,sin(90)计算的是90弧度而非90度,正确写法是sin(deg2rad(90));弧度转角度用rad2deg();浮点精度问题需用abs($result - $expected)
PHP的
sin和cos函数只认弧度,不认角度PHP内置的
sin、cos、tan等三角函数,参数单位是**弧度(radians)**,不是日常用的角度(degrees)。直接传90进去算sin(90),结果是0.89399666360056——这不是你想要的1,而是sin(90弧度)的值。常见错误现象:
sin(90) !== 1、cos(180) !== -1,代码逻辑看似对,但数学结果错得离谱。
- 要把角度转弧度:用
deg2rad($angle),比如sin(deg2rad(90))才等于1.0- 反过来,弧度转角度用
rad2deg($radian),适合调试或展示- 别手写
$angle * M_PI / 180——虽然等价,但deg2rad更可读、且在PHP内部做了浮点安全处理计算结果精度受浮点数限制,别直接比较
==PHP底层调用C库的
sin/cos,返回的是双精度浮点数。这意味着cos(M_PI)理论上该是-1,实际得到的是-1.0000000000000002这类值。使用场景:做条件判断(比如判断是否垂直)、参与后续精确计算(如坐标变换)、或存入数据库时需四舍五入。
立即学习“PHP免费学习笔记(深入)”;
- 判断是否接近某值,用
abs($result - (-1)) ,而不是<code>$result == -1- 展示给用户前,用
round($result, 10)截断无意义的小数位- 注意
M_PI本身只是近似值(3.141592653589793116),不要指望它能带来“绝对精确”的三角结果PHP没有内置
arcsin/arccos的度数版本,得自己封装PHP提供
asin、acos、atan,但它们返回的仍是弧度。如果你需要“已知sin值,求对应角度”,不能直接asin($x)完事——那结果是弧度,还得再转一次。参数差异:
asin($x)要求$x在[-1, 1]之间,否则返回NAN;而acos同理,越界会静默出错(不报warning,但结果无效)。
- 安全写法:
if ($x >= -1 && $x- 建议封装成小函数,比如
asin_deg($x),内部做范围检查 + 弧度转角度- 别忽略
is_nan()检查——尤其当输入来自用户或数据库时,浮点误差可能导致意外越界性能和兼容性几乎不用操心,但要注意
BCMath不支持三角函数原生
sin/cos是C实现,速度极快,百万次调用也毫秒级。除非你在做科学计算引擎,否则完全不用优化。容易踩的坑:有人想用
bcsin这种不存在的函数来提升精度——PHP的BCMath扩展**根本不提供任何三角函数**。它只支持加减乘除、幂、开方等基础运算。
- 高精度需求(比如天文计算)只能靠外部库(如
ext-gmp配合自定义泰勒展开),但绝大多数Web业务用不到- PHP 5.3+ 全版本都支持这些函数,无需额外扩展;Windows和Linux行为一致
- 如果看到
Call to undefined function sin(),基本是PHP被编译时禁用了math函数(极罕见),检查phpinfo()里的math模块状态事情说清了就结束。真正难的不是调用函数,而是时刻记住:PHP眼里没有“度”,只有“弧度”,所有角度都要过一遍
deg2rad——漏一次,bug就藏得特别深。
0
0
相关文章
PHP 装饰器模式实现面试题
批量修改目录及子目录中所有 PHP 文件内容的 Python 教程
PHP array_keys 与 array_values 使用说明
php批量将图片嵌入PPT的每个幻灯片
如何在单页中正确结合 AJAX 与 PHP 实现用户名实时校验
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。
846
2023.08.22
数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。
384
2023.06.29
删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。
2110
2023.08.14
在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。
357
2023.08.31
MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。
259
2023.09.05
vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。
329
2023.10.09
数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。
420
2023.10.16
vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。
472
2023.10.16
本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。
59
2026.03.06
热门下载
相关下载
精品课程



