精华内容
下载资源
问答
  • java实现开根号

    万次阅读 2017-08-22 20:46:51
    java根号

    主要思路

    通过牛顿迭代法计算平方根。来吧,还是看代码ba..

        private static double sqrt(double c) {
            if (c < 0)
                return Double.NaN;
    
            double jingdu = 1e-15;
            double t = c;
            while (Math.abs(c - t * t) > jingdu)
                t = (c / t + t) / 2.0;// 迭代公式
            return t;
        }

    改进算法。。。

        public static double sqrt(double m) {
            double i = 0;
            int k = 0;
            while ((i * i) <= m)
                i += 0.1;
            for (int j = 0; j < 10; j++) {
                i = (m / i + i) / 2;
            }
            return i;
        }
    展开全文
  • Java-求根号n

    2017-09-16 19:33:00
    平方,开根号java中是很简单的,Math.sqrt(double n)或者 Math.pow(double a, double b),求a的b次方。但是我们可以自己想想,这些方法到底是怎么实现的。 就拿开根号来解释,它有两种方法,二分法和牛顿迭代法。...

    平方,开根号在java中是很简单的,Math.sqrt(double n)或者 Math.pow(double a, double b),求a的b次方。但是我们可以自己想想,这些方法到底是怎么实现的。

    就拿开根号来解释,它有两种方法,二分法和牛顿迭代法。

    二分法:

    比如求根号5

    第一步:折半:       5/2=2.5

    第二步:平方校验:  2.5*2.5=6.25>5,并且得到当前上限2.5,记录。

    第三步:再次向下折半:2.5/2=1.25

    第四步:平方校验:1.25*1.25=1.5625<5,得到当前下限1.25,记录

    第五步:再次折半:2.5-(2.5-1.25)/2=1.875

    第六步:平方校验:1.875*1.875=3.515625<5,得到当前下限1.875,替换下限值

    ......

    一直到与5的差值在你定义的误差范围内才结束循环

    代码:

    import java.text.DecimalFormat;
    
    public class Main {
          
        public static double sqrt(double num){
            if(num<0) {
                return -1;
            }
            
            double low = 0;
            double high = num/2;
            double precision = 0.000001;
            //格式化,保证输出位数
            DecimalFormat df = new DecimalFormat("#.00");
            
            double res = high;
            while(Math.abs(num-(res*res))>precision) {
                if(high*high > num) {
                    double n= high - (high-low)/2;
                    if(n*n>num) {
                        high = n;
                    } else if(n*n<num){
                        low = n;
                    }else {
                        return Double.valueOf(df.format(n));
                    }
                    res = n;
                    
                } else if(high*high < num){
                    double m = high + (high-low)/2;
                    if(m*m>num) {
                        low = high;
                        high = m;
                    } else if(m*m<num){
                        low = high;
                        high = m;
                    }else {
                        return Double.valueOf(df.format(m));
                    }
                    res = m;
                } else {
                    return Double.valueOf(df.format(high));
                }
            }
            
            return Double.valueOf(df.format(res));
        }
        
        public static void main(String[] args) {
            double a = 7;
            System.out.println(sqrt(37));
        }
    }

     

    牛顿迭代法:

    其实就是逼近的思想,例如我们要求a的平方根,首先令f(x)=x^2-a,那么我们的目的就是求得x使得f(x)=0,也就是求x^2-a这条曲线与x轴的交点,画图举例:

     

     

     

    由函数f(x)=x^2-a,我们求导可以知道,函数上任意一点(x,y)的切线的斜率为2x。假设过点(x0,y0)的切线方程为y=kx+b,那么切线与x轴的交点横坐标为-b/k。而b=y0-kx0,k=2x0,y0=x0^2-a,化简-b/k=(x0+a/x0)/2。

    也就是说(x0+a/x0)/2是过点(x0,y0)的切线与x轴的交点的横坐标。记(x0+a/x0)/2=x',继续求过点(x',f(x'))的切线与x轴的交点的横坐标x'',很明显x''比x'更靠近函数f(x)=x^2-a与x轴的交点的横坐标(即a的正平方根)。逐渐的逼近f(x)=0;

    所以公式为:x' = (x'+a/x')/2。

    代码:

    import java.text.DecimalFormat;
    
    public class Main1 {
        public static double sqrt(double x) {  
            if(x<0) {
                return -1;
            }
            //格式化,保证输出位数
            DecimalFormat df = new DecimalFormat("#.00");
            
            double k = x; 
            double precision = 0.000001;
            while((k*k-x)>precision) {
                k=0.5*(k+x/k);  
            }
            return Double.valueOf(df.format(k));
        }
        
        public static void main(String[] args) {
            double a = 9;
            System.out.println(sqrt(a));
        }
    }

     

    参考文献:

    二分法和牛顿迭代法求平方根(Python实现)

    牛顿迭代法求平方根

    转载于:https://www.cnblogs.com/loren-Yang/p/7532476.html

    展开全文
  • package classifier; public class getSqrt { public static void main(String[] args){ double a = 15; System.out.println(Math.sqrt(a)); System.out.println(Math.floor(Math.sqr...
    package classifier;
    
    public class getSqrt {
        public static void main(String[] args){
            double a = 15;
            System.out.println(Math.sqrt(a));
            System.out.println(Math.floor(Math.sqrt(a)));
            double b = Math.floor(Math.sqrt(a));
            int i = (new Double(4.30)).intValue();
            System.out.println(i);
        }
    }

    向上取整用ceil

    展开全文
  • Java实现开根号

    千次阅读 2018-09-30 02:21:47
    Java实现开根号 二分法 static float sqr(float x){ float max = x; float min = 0; float mid=(min+max)/2; while (true){ if (Math.abs(x-mid*mid)&amp;lt;0.002) return mid;...

    Java实现开根号

    二分法

       static float sqr(float x){
            float max = x;
            float min = 0;
            float mid=(min+max)/2;
            while (true){
                if (Math.abs(x-mid*mid)<0.002) return mid;
    
                if(mid*mid>x)
                {
                    max=mid;
                }
                else if(mid*mid<x)
                {
                    min=mid;
                }
    
                mid=(min+max)/2;
            }
    
    
        }
    

    牛顿法

    牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。

    设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f’(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f’(x0),称x1为r的一次近似值。

    过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f’(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f’(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

        static float Newton_sqr(float x){
            float k = 1;
            while (Math.abs(k*k-x)>1e-5){
                k=(k+x/k)/2;
            }
            return k;
        }
    

    参考

    https://blog.csdn.net/huaqianmian/article/details/51279627?utm_source=copy

    展开全文
  • java 不用内置函数根号

    千次阅读 2016-08-20 16:47:22
    如题,刚开始用循环直接求了根号,后来模拟了内置函数sqrt求取 主要使用二分法,均已经运行可以出结果 直接上代码: 第一个: package test; import java.util.Scanner; public class xy { public static ...
  • java实现开根号的运算

    千次阅读 2020-04-21 22:43:37
    java实现开根号的运算 如果某个数字正好可以开根号为2个整数,例如1,4,9等,那就很简单了。 如果某个数字不可以正好开根号为2个整数,而且要保留几位精度,例如:2,3,5等,我们该怎么办呢????? 首先我们可以...
  • Java语言编程计算根号2,要求不能调用math中的函数,要用循环来编写
  • import java.util.LinkedList; import java.util.List; public class Calc { final public static String[] OPT_ADD = { "+", "add", "plus", "jia" }; final public static String[] OPT_SUB = { "-", "sub", ...
  • Java Math里的立方根函数

    千次阅读 2021-06-11 20:37:31
    *Math.cbrt()//计算立方根 *Math.sqrt()//计算平方根 *Math.pow(a, b)//计算a的b次方 *Math.max( , );//计算最大值 *Math.min( , );//计算最小值
  • 需求:在不借助系统库的情况下,编写一个函数,实现开根号的操作,并且保证一定的精度 代码采用了牛顿迭代法以及二分查找法两种方式并分别打印了他们的循环次数以比较优劣: /** * 实现一个函数,完成对v开根号的...
  • java:数学运算的指数函数方法

    千次阅读 2020-02-02 15:39:16
    数学运算的指数函数方法相关说明源码运行结果 相关说明 方法Math.A A为各种数学方法 数学方法(这里的A): exp(a) :e的a次方 log(b) :ln(b)的值 lgc :lgc的值 sqrt(d) :根号d的结果,且d不为负数 cbrt(h)...
  • Java编程实现Math.sqart(开根号)方法

    千次阅读 2017-10-18 22:55:51
    以上定义的方法是开根号的代码实现 public static void main(String[] args) {  System.out.println(Math.sqart(11111)); System.out.println(Mathe.squrt(11111)); System.out.println("程序没结束");...
  • Java中的函数(方法)

    2020-02-11 14:32:56
    每个语言里面基本上都有函数,不过现在好多语言里面已经慢慢的修改了它的名称,不叫函数了,而是叫做方法。为了方便起见,下面我还是以“函数”这个名称来说。我们一直在用函数,但是如果突然问你,为什么会有函数的...
  • Java计算一个数的平方根(即:根号)

    千次阅读 2021-01-20 14:27:19
    实现函数int sqrt(int x). 计算并返回x的平方根(向下取整) 示例1 输入 2 返回值 1 import java.util.*; public class Solution { /** * 根据平方数的性质——连续n个奇数相加的结果一定是平方数。 ...
  • 主要介绍了Java编程实现验证哥德巴赫猜想,具有一定参考价值,需要的朋友可以了解下。
  • 比如math.sqrt(9)结果为3 意思是求9的开方根,数学上称为根号2下的9 2.**重点内容**pow(a,b) Math.pow(27, 3)意思是求27的三次方 就是27*27*27的意思 重点内容假如你想求开三次方,或者四次方 可以借助pow方法 ...
  • Java中从键盘输入多个整数

    万次阅读 2017-09-18 20:42:11
    Java中从键盘输入多个整数,Scanner
  • public class Math {public static void main(String[] args) {double a=0.0001;double result ;for (double i=2.0;i<=5.0;i+=a) {result=i*i;double b=5.0-a;if ((result>=b)&&resul...
  • 7-6 jmu-Java-01入门-开根号

    千次阅读 2019-11-24 22:47:00
    使用逐步逼近法对给定数值x求开根号。 逐步逼近法说明:从0开始逐步累加步长值。 步长=0.0001,epsilon(误差)=0.0001 循环继续的条件: 平方值<x 且 |x-平方值| > epsilon 说明与参考 数值输出保留6位小数,...
  • Java字符串相似度计算,余弦算法 本文是计算两个字符串的相似度 具体步骤为 1、求出两个字符串的并集 2、计算两个字符串的词频 3、通过公式算出余弦值:夹角越小,相似度越大,越接近1,相似度越大 如:以下...
  • java.text.DecimalFormat; import java.util.Scanner; /** * 求平方根 */ public class Sqr { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner scan = ...
  • import java.util.*; public class Solution { public static void main(String[] args) { System.out.println("请输入一个数:"); Scanner sc = new Scanner(System.in); float a =sc.nextFloat(); double...
  • import java.util.Scanner; public class Main { public static void main(String[] args) { /* 使用逐步逼近法对给定数值x求开根号。 逐步逼近法说明:从0开始逐步累加步长值。 步长=0.0001,epsilon(误差)=0.0001 ...
  •  自己实现一个比较字符串大小的函数,也即实现strcmp函数函数:int myStrcmp(char *s1,char *s2) 按照ASCII顺序比较字符串s1与s2。若s1与s2相等返回0,s1>s2返回1,s1  "A"  "a">"A"  "computer">"compare...
  • } /** * @param mathFormulaScript 数学公式字符串,如:mathFormula = (2*3-45/5+(9)+9%5 +2*(1+2) + Math.sqrt(3))/9.0 * 注意:如果使用开根号等三角函数等一些高级计算,则使用Math中字符串来替代,如4开根号==...
  • Java 求一个数的立方根

    千次阅读 2019-06-09 21:20:32
    求解一个数的立方根,单纯一个数学问题,我这里写两种解法。...import java.util.*; import java.text.DecimalFormat; // 格式转换,float 转为 double public class Main{ public static void mai...
  • 使用逐步逼近法对给定数值x求开根号。...求平方,参考Math.pow函数。 输入值<0时,返回Double.NaN 输入格式: 任意数值 输出格式: 对每一组输入,在一行中输出其开根号。保留6位小数 输入样例: -1 0 0
  • 实现一个函数, 完成 开根号 的操作, 方法签名如下. double sqrt(int v, double t) 要求: 不能调用系统库函数, 诸如 Math.sqrt(v) 之类的; 假设计算出的结果为 r, 要求满足如下条件, , ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,726
精华内容 690
关键字:

java根号函数

java 订阅