Java核心技术卷I基础知识3.5.1 数学函数与常量
3.5.1 数学函数与常量
在Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。
要想计算一个数值的平方根,可以使用sqrt方法:
注释:println方法和sqrt方法存在微小的差异。println方法处理System.out对象。但是,Math类中的sqrt方法处理的不是对象,这样的方法被称为静态方法。有关静态方法的详细内容请参看第4章。
在Java中,没有幂运算,因此需要借助于Math类的pow方法。语句:
将y的值设置为x的a次幂(xa)。pow方法有两个double类型的参数,其返回结果也为double类型。
f?loorMod方法的目的是解决一个长期存在的有关整数余数的问题。考虑表达式n % 2。所有人都知道,如果n是偶数,这个表达式为0;如果n是奇数,表达式则为1。当然,除非n是负数。如果n为负,这个表达式则为-1。为什么呢?设计最早的计算机时,必须有人制定规则,明确整数除法和求余对负数操作数该如何处理。数学家们几百年来都知道这样一个最优(或“欧几里德”)规则:余数总是要≥0。不过,最早制定规则的人并没有翻开数学书好好研究,而是提出了一些看似合理但实际上很不方便的规则。
下面考虑这样一个问题:计算一个时钟时针的位置。这里要做一个时间调整,而且要归一化为一个0~11之间的数。这很简单:(position + adjustment) % 12。不过,如果这个调整为负会怎么样呢?你可能会得到一个负数。所以要引入一个分支,或者使用((position + adjustment) % 12 + 12) % 12。不管怎样,总之都很麻烦。
f?loorMod方法就让这个问题变得容易了:f?loorMod(position + adjustment, 12)总会得到一个0~11之间的数。(遗憾的是,对于负除数,f?loorMod会得到负数结果,不过这种情况在实际中很少出现。)
Math类提供了一些常用的三角函数:
还有指数函数以及它的反函数——自然对数以及以10为底的对数:
最后,Java还提供了两个用于表示π和e常量的近似值:
提示:不必在数学方法名和常量名前添加前缀“Math”,只要在源文件的顶部加上下面这行代码就可以了。
例如:
在第4章中将讨论静态导入。
注释:在Math类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类。它使用“自由发布的Math库”(fdlibm)实现算法,以确保在所有平台上得到相同的结果。有关这些算法的源代码请参看www.netlib.org/fdlibm(当fdlibm为一个函数提供了多个定义时,StrictMath类就会遵循IEEE 754版本,它的名字将以“e”开头)。
相关文章
- Java要抛弃祖宗的基业,Java程序员危险了!
- 十大 Java 语言特性
- JVM 三色标记算法,原来是这么回事!
- 聊聊 Spring 事务控制策略以及 @Transactional 失效问题避坑
- 写给 Java 程序员的前端 Promise 教程
- 写给 Java 程序员的前端 Promise 教程,你学会了吗?
- Java 中为什么不全部使用 Static 方法?
- Java 池化技术你了解多少?
- Java 服务 Docker 容器化优秀实践
- Spring Boot + EasyExcel导入导出,简直太好用了!
- 我们一起聊聊 Java 内存泄漏
- CentOS 下安装 Docker 极简教程
- JDK 19 功能集冻结:Java 19 只有七个新特性
- 关于 CMS 垃圾回收器,你真的懂了吗?
- 为什么会有这么多编程语言?
- 改善Java代码的八个建议
- 接口流量突增,如何做好性能优化?
- Java 以编程方式创建JAR文件
- POJO、Java Bean是如何定义的
- Spring 的 Bean 明明设置了 Scope 为 Prototype,为什么还是只能获取到单例对象?