12
返回列表 发新帖
楼主: yabay91
跳转到指定楼层
上一主题 下一主题
收起左侧

优步电话面

🔗
eason0218 2018-5-12 12:04:48 | 只看该作者
全局:
landy622 发表于 2018-5-12 05:02
牛顿 还是没办法handle 0.001

public static int sqrt(double x) {

可以handle没问题。测试过。
public static double cubicRoot(double x){
       double xn = 1.0;
       double eps = 1e-12;

       while (Math.abs(xn * xn * xn - x) > eps){
           xn = 2 * xn / 3 + x / (3 * xn * xn);
           System.out.println(xn);
       }
       return xn;
    }

以下是打印出来的convergence history:
0.6669999999999999
0.4454159172287918
0.2986240918149584
0.20282063977834344
0.1433169204928053
0.11177331656703804
0.10119656693666
0.10001409266436925
0.10000000198565878
0.10000000000000003
0.10000000000000003


没仔细看你的码,貌似你那个递推不太对。

评分

参与人数 2大米 +6 收起 理由
love_ballon + 3 很有用的信息!
mmbp123 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
landy622 2018-5-13 04:06:19 | 只看该作者
全局:
yabay91 发表于 2018-5-12 05:08
来加点儿米啊小哥~~~~

怎么加米呢??新人哈哈哈
回复

使用道具 举报

🔗
landy622 2018-5-13 04:08:05 | 只看该作者
全局:
eason0218 发表于 2018-5-12 12:04
可以handle没问题。测试过。
public static double cubicRoot(double x){
       double xn = 1.0;

学习了!!!
回复

使用道具 举报

🔗
eason0218 2018-5-13 05:49:14 | 只看该作者
全局:

哈哈有用加点儿米呗~
回复

使用道具 举报

🔗
天择 2018-5-22 02:46:32 | 只看该作者
全局:
  1.     static double cubicRoot(double n) {
  2.         
  3.         double start;
  4.         double end;
  5.         double err = 1e-12;
  6.         boolean isPositive;
  7.         double ans;
  8.         if (n > 0) {
  9.             isPositive = true;
  10.         } else {
  11.             isPositive = false;
  12.             n = -n;
  13.         }
  14.         
  15.         if (n >= 1) {
  16.             start = 1;
  17.             end = n;
  18.         } else {
  19.             start = n;
  20.             end = 1;
  21.         }
  22.         
  23.         while(true) {
  24.             double mid = (start + end)/2;
  25.             double error = Math.abs(mid*mid*mid - n);
  26.             System.out.println(mid);
  27.             if (error <= err) {
  28.                 ans = mid;
  29.                 break;
  30.             }
  31.             
  32.             if (mid*mid*mid > n) {
  33.                 end = mid;
  34.             } else {
  35.                 start = mid;
  36.             }   
  37.         }
  38.         return isPositive ?  ans : -ans;
  39.     }
复制代码

补充内容 (2018-5-22 02:47):
-1 到 1时 起点和终点反着来就行

评分

参与人数 2大米 +6 收起 理由
mrzhu + 3 很有用的信息!
love_ballon + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
love_ballon 2018-6-19 05:26:25 | 只看该作者
全局:
楼上的二分法和牛顿迭代法都可以。不需要考虑(-1, 1)
回复

使用道具 举报

🔗
forestshen 2018-7-13 14:11:50 | 只看该作者
全局:
landy622 发表于 2018-5-12 05:02
牛顿 还是没办法handle 0.001

public static int sqrt(double x) {

你的递推公式错了
如果是 sqrt, res = (res + x/res)/2
如果是cubicRoot, res = (2*res + x/res^2)/3
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表