A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 随便 中级黑马   /  2013-4-2 12:36  /  4138 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邓宫财 于 2013-4-3 16:41 编辑

例如:double b = 4; √b的值计算出来时2.
用java语言,帮忙解决一下。
不能使用java.lang.Math.sqrt()方法。
查看方法内部源代码

  1. public static native double sqrt(double a);
复制代码
所以没有提供什么解决方案而是使用本地解决,所以不知道怎么处理的.
希望也给不知道的同学考虑考虑

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 分析的老详细呢

查看全部评分

7 个回复

倒序浏览
我有一种方案,就是使用牛顿迭代法。

用(x,f(x))的切线来逼近方程x^2-a=0的根。
例如:求3的平方根。可以随机指定一个数,来运算。当然猜的离结果越近,运算的次数就越少。
指定一个1.5
(1.5 + 3/1.5)/ 2 = 1.25
(1.25 + 3/1.25 )/2 = 1.825
(1.825 + 3/1.825)/2 = 1.73441780...
(1.73441780.. + 3/1.73441780...)/2 = 1.7320524227
(1.732052.. + 3/1.732052...)/2 = 1.7320508075692877581042601492334.就已经离计算器算的值1.73205080756的小数点后11位结果一样了。只需要一直重复就越接近。




评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. public class MySqrt {
  2.         public static void main(String[] args) {
  3.                 double number = 2;
  4.                 //求一个指定数以内的值
  5.                 double randomValue = new Random().nextInt((int)number);
  6.                
  7.                 System.out.println(sqrt(number,randomValue,7));
  8.                
  9.         }
  10.         public static double sqrt(double number,double randomValue,int flag){
  11.                 double result = (randomValue + number / randomValue)/2;
  12.                 flag--;
  13.                 if(flag == 0){
  14.                         return result;
  15.                 }
  16.                 return sqrt(number,result,flag);
  17.         }
  18. }
复制代码
回复 使用道具 举报
由于之前一个朋友遇到这道笔试题,没有解决。自己也想了很久没有想明白,今天抱着问问的心理。自己查到了,牛顿迭代法。就把问题解决了。
⊙﹏⊙b汗。用人笔算滴话,就太费劲了。不过是电脑运算,10次,10次都没事。
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
我试了一个int的,double实在不会。int可以用夹逼定律,代码如下:
  1. package com.heima.practise;

  2. public class HalfTest {
  3.         public static void main(String[] args) {
  4.                 int d = 26;
  5.                 int min = 1;
  6.                 int max = d;
  7.                 try {
  8.                         System.out.println(sqrt1(min,max,d));
  9.                 } catch (Exception e) {
  10.                         // TODO Auto-generated catch block
  11.                         e.printStackTrace();
  12.                 }
  13.         }

  14.         private static int sqrt1(int min,int max,int num) throws Exception {
  15.                
  16.                 int d = num;
  17.                 int mid = (min + max)/2;
  18.                 int mid2 = mid * mid;
  19.                 if(mid2>num)
  20.                         max = mid;
  21.                 else if(mid2<num)
  22.                         min = mid;
  23.                 else
  24.                         return mid;
  25.                 if(min>=max-1){
  26.                         throw new Exception("此数没有平方根!");
  27.                 }
  28.                 return sqrt1(min,max,d);
  29.                
  30.         }


  31. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +9 收起 理由
随便 + 9 很给力!
田磊阳 + 1

查看全部评分

回复 使用道具 举报
朱德帅 发表于 2013-4-3 12:45
我试了一个int的,double实在不会。int可以用夹逼定律,代码如下:

谢谢,回答。却是处理整数,也是一种方法。
回复 使用道具 举报
本帖最后由 邓宫财 于 2013-4-7 16:54 编辑
  1.                 public static void main(String[] args) throws Exception {
  2.                         
  3.                 }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马