编写一段c语言程序,完成某数值变量开根号的算法.精度0.001,【算法系列】-开根号...

这篇博客通过测试比较了三种计算平方根的方法:暴力循环法、二分法和牛顿迭代法,在精度要求0.001的情况下计算1亿的平方根。结果显示,二分法在147毫秒内完成,牛顿法和循环法也有较快的计算速度。这展示了不同算法在效率上的差异和计算机处理能力。
摘要由CSDN通过智能技术生成

package com.daojia.math;

public class SquereTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

long t1 =System.currentTimeMillis();

double srt = Math.sqrt(100000000.0);

System.out.println("jdkuse:"+(System.currentTimeMillis()-t1)+":"+srt);

double jingdu = 0.001;

long t2 =System.currentTimeMillis();

double srt1 = sq1(100000000.0,0.001);

System.out.println("循环use:"+(System.currentTimeMillis()-t2)+":"+srt1);

System.out.println(Math.abs(srt1-srt)

long t3 =System.currentTimeMillis();

double srt2 = sq2(100000000.0,0.001);

System.out.println("二分法use:"+(System.currentTimeMillis()-t3)+":"+srt2);

System.out.println(Math.abs(srt2-srt)

long t4 =System.currentTimeMillis();

double srt3 = sq3(100000000.0,0.001);

System.out.println("牛顿法use:"+(System.currentTimeMillis()-t4)+":"+srt3);

System.out.println(Math.abs(srt3-srt)

}

/**

* 暴力循环法

* @param num

* @param jingdu

* @return

*/

public static double sq1(double num,double jingdu){

if(num<0)

{

return -1;

}

double step =jingdu/5;

System.out.println(step);

double res =0.000;

while(res*res

{

res =res+step;

}

return res;

}

/*

* 二分法

*

*/

public static double sq2(double num,double jingdu){

if(num<0)

{

return -1;

}

double last =0.0000;

double low=0;

double mid;

double up=(num>=1?num:1);

mid=(low+up)/2;

do{

if(mid*mid>num)

{

up = mid;

}else{

low = mid;

}

last=mid;

mid=(up+low)/2;

}while(Math.abs(mid-last)>jingdu);

return mid;

}

/*

* 牛顿迭代法

*

*/

public static double sq3(double num,double jingdu){

if(num<0)

{

return -1;

}

double x=num,y=0.0;

while(Math.abs(x-y)>0.00001){

y=x;

x=0.5*(x+num/x);

}

return x;

}

}

jdkuse:0:10000.0

2.0E-4

循环use:147:10000.000011057207

true

二分法use:0:9999.999747378752

true

牛顿法use:0:10000.0

true我们可以看出,现在计算机还是很快的,对于1亿,精度要求0.001的情况下。用了147毫秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值