Java中开根号,你还记得吗

这篇具有很好参考价值的文章主要介绍了Java中开根号,你还记得吗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

开根号相信大家都不陌生,这是一种数学运算,也称为开方运算,运算符号是根号 √ ̄。那么在 Java 中如何实现开方运算呢?


一、了解根号运算

根号运算是一种数学运算,也称为开方运算。它的运算符号是 √ ̄,被称为根号符号,要将被开方的数包围。若 aⁿ=b,那么 abn 次方的 n 次方根或 ab1/n 次方。

n 次方的 n 写在符号 √ ̄ 的左边,n=2(平方根)时 n 可以忽略不写 x \sqrt{x} x ,但若是立方根(三次方根) x 3 \sqrt[3]{x} 3x 、四次方根 x 4 \sqrt[4]{x} 4x 等,是必须书写。

我们比较常见的也就是求一个数的平方根了,对于一个非负实数 x,它的平方根 y 是一个非负实数,使得 y 的平方等于 x,即 y²=x。例如, 4 \sqrt{4} 4 =2,因为 2²=4 9 \sqrt{9} 9 =3,因为 3²=9

需要注意的是,在实数范围内,负数没有实数平方根,因此,不能对负数进行开方运算,除非使用复数。

在计算中,可以利用计算器或数表等工具进行简便的根号运算,也可以通过手工计算,使用牛顿迭代法等算法进行近似计算。

二、Java开根号

1.Math.sqrt()开平方根

Java 中可以使用 Math 类的 sqrt 方法来实现平方根号运算。该方法的作用是返回一个数的平方根。
Math 类在 java.lang 包下,也是一个最终类,JDK1.0 就存在了。Math 类包含执行基本数值运算的方法,例如初等指数函数、对数函数、平方根函数和三角函数等。

public final class Math {}

Math 类中有 sqrt 方法,求平方根。以下是 sqrt() 方法源码:

/**
 * Returns the correctly rounded positive square root of a
 * {@code double} value.
 * Special cases:
 * <ul><li>If the argument is NaN or less than zero, then the result
 * is NaN.
 * <li>If the argument is positive infinity, then the result is positive
 * infinity.
 * <li>If the argument is positive zero or negative zero, then the
 * result is the same as the argument.</ul>
 * Otherwise, the result is the {@code double} value closest to
 * the true mathematical square root of the argument value.
 *
 * @param   a   a value.
 * @return  the positive square root of {@code a}.
 *          If the argument is NaN or less than zero, the result is NaN.
 */
public static double sqrt(double a) {
    return StrictMath.sqrt(a); // default impl. delegates to StrictMath
                               // Note that hardware sqrt instructions
                               // frequently can be directly used by JITs
                               // and should be much faster than doing
                               // Math.sqrt in software.
}

我们可以看到该方法是静态方法,也就是可以通过 Math.sqrt() 直接调用。需要传入双精度 double 类型数值,返回的也是 double 类型数值。方法体很简单直接调用 StrictMath.sqrt(a); 它这里解释说默认的 impl,委托给 StrictMath

例如,要计算 9 的平方根,可以使用以下代码:

double result = Math.sqrt(9);
System.out.println(result); // 输出结果为3.0

需要注意的是,sqrt 方法返回的是一个 double 类型的数值,如果需要精确计算,应该使用 BigDecimal 类进行计算。

我们在深究一下:

在 Java 中,根号运算被委托给了 Java 虚拟机中的 Math 库进行计算。Math 库中的 sqrt 方法采用了一些数学算法来求解开方运算,具体实现方式取决于底层的操作系统和硬件平台。

通常情况下,Java 虚拟机会使用硬件指令来进行数学计算,这样可以大大提高计算速度。对于无法使用硬件指令的情况,Java 虚拟机会使用软件实现的算法来进行计算。

无论使用哪种实现方式,Math 库的 sqrt 方法都会返回一个 double 类型的结果,表示被开方数的平方根。我们可以直接使用该结果进行后续的操作,例如计算平方根的倒数、平方等等。需要注意的是,sqrt 方法返回的结果并不是精确的,而是一个近似值,具体精度取决于底层实现的算法和硬件平台。如果需要进行高精度的计算,可以使用 BigDecimal 类来替代 Math 库中的方法。

2.Math.pow()开根号

在 Java 中,可以使用 Math 库的 pow 方法来进行求平方根的运算,但不是最有效的方法,因为 Math.pow() 通常使用指数函数来计算, 指数函数在近似计算时可能会导致精度误差。

如果要计算一个数的平方根,在 Java 中使用 Math.sqrt() 是更好的选择。sqrt() 方法是专门用来计算平方根的方法,它能保证对于任何非负数,都可以在不损失精度的情况下获得正确的平方根。

若要使用 Math.pow() 来求一个数 x 的平方根,可以使用以下代码:

Math.pow(x, 0.5)

这里,使用了 Math.pow(x, 0.5) 代表 x1/2 次幂,即其平方根。但是由于 Math.pow() 是用指数函数来计算的,可能会导致精度误差,因此不建议用这种方式来计算平方根。

3.牛顿迭代法来近似求解平方根

可以自己使用 Java 编写一个求平方根的方法。例如,可以使用 牛顿迭代法 来近似求解平方根。以下是网上一个简单的示例代码:简单测试没问题。

public static double mySqrt(double x) {
    if (x < 0) {
        throw new IllegalArgumentException("不能计算负数的平方根");
    }

    double guess = x / 2.0; // 初始值为x的一半
    double tol = 1e-15; // 精度
    int maxIter = 50; // 最大迭代次数

    for (int i = 0; i < maxIter; i++) { // 进行迭代
        double fx = guess * guess - x; // f(x)的函数值
        double fpx = 2.0 * guess; // f'(x)的函数值(导数)
        double diff = fx / fpx; // 迭代量
        guess = guess - diff; // 更新猜测值
        if (Math.abs(diff) < tol) { // 只要迭代量小于某个阈值就停止迭代
            break;
        }
    }

    return guess;
}

在该代码中,mySqrt() 方法使用 牛顿迭代法 进行近似求解平方根。它接收一个 double 类型的参数 x,表示要计算平方根的数值。如果 x 是负数,则抛出 IllegalArgumentException 异常。接着,程序使用 x/2.0 作为初始猜测值,设置一些精度和迭代次数的参数,并进行迭代计算。每次迭代时,程序都会计算当前猜测值的平方,计算出 f(x)f’(x),然后更新猜测值。只要迭代量小于设定的精度,就停止迭代,并返回最终的猜测值作为平方根的近似值。


总结

本文主要讲解了 Java 中如何求一个数的平方根,先对根号运算进行了介绍,然后介绍了三种开根号方法,大家肯定要使用 Math.sqrt() 进行开平方根,第二、三种不建议使用。文章来源地址https://www.toymoban.com/news/detail-489974.html

到了这里,关于Java中开根号,你还记得吗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【UnityUGUI】复合控件详解,你还记得多少

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : UI_Unity专栏 素材来自唐老狮 🅰️ 脑图知识点 参数概览-颜色响应 参数概览-图片响应 参数概览-动画响应 通过自动生成按钮动画控制器

    2024年02月08日
    浏览(38)
  • 【unity每日一记】那些动作基础你还记得吗—移动和旋转相关

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(45)
  • 【Pygame实战】怀旧经典—这款给娃的棋类游戏,你还记得叫什么吧?(一定要收藏)

    大家以前应该都听说过一个游戏:叫做 走四棋儿 这款游戏出来到现在时间挺长了,小时候的家乡农村条件有限,附近也没有正式的玩具店能买 到玩具,因此小朋友们聚在一起玩耍时,其玩具大多都是就地取材的。 直接在家里的水泥地上用烧完的炭火灰画出几条线,摆上几颗

    2024年02月05日
    浏览(152)
  • 【Python童年游戏】满满的回忆杀—那些年玩过的童年游戏你还记得吗?那个才是你的菜?看到第一个我就泪奔了(致我们逝去的青春)

    滴一一学生卡🙌 结伴上车的学生仔子们 用笑声打破车厢的沉默 大人眼里的晚高峰 是给放学后快乐😀时光的加时 下车的学生匆匆起身带起 一阵熟悉的栀子香于💓 是关于校园的记忆 开始零零散散地闪现 放学后集合的秘密基地/跟着城市变了模样 超级马里奥里的隐藏地图😁

    2023年04月09日
    浏览(45)
  • 修改ideal中java项目jdk版本,记得收藏

    1、Ctrl+Shfit+Alt+S 进入Settings 窗口,修改红框标记的两处jdk版本 2、Ctrl+Shfit+Alt+S 进入Project Structure窗口,先确定安装了需要的jdk版本 3、项目设置中project的项目sdk选择对应版本jdk,模块jdk版本设置  4、修改模块具体源码的jdk版本  5、项目导入的jdk依赖包  6、如果maven项目 pom.x

    2024年02月11日
    浏览(46)
  • java中http请求,记得加字符集 UTF-8,StringEntity

    http请求经常会遇到一些奇怪的问题,例如发送请求失败,或者response出现问题,或者参数中带了url调接口失败,调用微信接口失败,调用nginx转发失败,等等。 但用postman调用不会有问题。 这说明参数本身没有问题,服务器也没有问题,是客户端的问题。在你的代码里面,客

    2024年02月07日
    浏览(53)
  • Java设计模式-前言

     馆长准备了很多学习资料,其中包含 java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具  等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关

    2024年01月21日
    浏览(42)
  • 根号分治(根号算法)

    是根号算法,然而不是分块; 是论文,然而不是莫队; 是暴力美学,然而不是暴力。 哈希冲突 R e m a i n d e r P r o b l e m Remainder Problem R e main d er P ro b l e m 这两题貌似没有区别 ,我们以 R e m a i n d e r P r o b l e m Remainder Problem R e main d er P ro b l e m 作为例子来介绍。 给你一个长

    2024年03月20日
    浏览(41)
  • Java开发 - 带你了解集群间的相互调用,你还在等什么?

    目录 前言 导读 项目准备 集群准备 父工程引入子项目 服务调用方HelloService准备 pom文件 yml文件 Controller文件 服务提供方HelloWorld准备  pom文件 yml文件 Controller文件  运行此两个工程  hello_world组集群 集群调用测试 RestTemplate换成Dubbo行不行,怎么换 两个pom文件引入依赖  两个启

    2024年02月09日
    浏览(42)
  • Java 你还在用list.contain做去重? 你是故意的还是不小心的?

    最近又是一轮代码review , 发现了一些实现去重的代码,在使用 lsit.contain ...... 如: 我沉思,是不是其实很多初学者也存在这种去重使用问题? 所以我选择把这个事情整出来,分享一下。 首先是造出一个 ListString 模拟数据,一共2W条,里面有一半数据1W条是重复的: 先看看 我们

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包