Sqrt

牛顿迭代法

 1 double NewtonMethod(double fToBeSqrted)
 2 {
 3     double x = 1.0;
 4     while(abs(x*x-fToBeSqrted) > 1e-5)
 5     {
 6         x = (x+fToBeSqrted/x)/2;
 7     }
 8
 9     return x;
10 }

二分法

 1 float get_sqrt(float x)
 2 {
 3     float low=0, up=x, mid, now;
 4     mid=(low+up)/2;
 5     do
 6     {
 7         now=mid;        //**now保存上一次计算的值
 8         if(mid*mid<x)   //**mid偏小,右移
 9         {
10             low=mid;
11         }
12         else       //**mid偏大,左移
13         {
14             up=mid;
15         }
16         mid=(low+up)/2;
17     }while(abs(mid-now)>eps); //**两次计算的误差小于eps,mid即为所求值
18     return mid;
19 }
时间: 2024-11-05 22:02:56

Sqrt的相关文章

[leedcode 69] Sqrt(x)

Implement int sqrt(int x). Compute and return the square root of x. public class Solution { //本题利用了牛顿迭代法:设r是f(x) = 0的根(x^2-k=f(x)),选取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的一次近似值.

69. Sqrt(x)(LeetCode)

Implement int sqrt(int x). Compute and return the square root of x. 1 class Solution { 2 public: 3 int mySqrt(int x) { 4 long r = x; 5 while (r*r > x) 6 r = (r + x/r) / 2; 7 return r; 8 } 9 };

整数划分优化,时间复杂度O(n*sqrt(n))

基准时间限制:1 秒 空间限制:131072 KB 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种.由于数据较大,输出Mod 10^9 + 7的结果即可. Input 输入1个数N(1 <= N <= 50000). Output 输出划分的数量Mod 10^9 + 7. Input示例 6 Output示例 4 常见的方法是行不通的,这里dp[i][j]表示的是j个数字和为i的情况dp[i][j] = dp[i -

Leetcode 69. Sqrt(x) 求整数根 in Java

69. Sqrt(x) Total Accepted: 109623 Total Submissions: 418262 Difficulty: Medium Implement int sqrt(int x). Compute and return the square root of x. public class Solution { public int mySqrt(int x) { if(x==1) return 1; //注意此题返回值int,和sqrt返回值double不同 do

【模拟】HDU 5752 Sqrt Bo

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5752 题目大意: 定义f(n)=⌊√n⌋,fy(n)=f(fy-1(n)),求y使得fy(n)=1.如果y>5输出TAT.(n<10100) 题目思路: [模拟] 5层迭代是232,所以特判一下层数是5的,其余开根号做.注意数据有0. 队友写的. 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h&g

sqrt 源代码

double Item_func_sqrt::val_real(){ DBUG_ASSERT(fixed == 1); double value= args[0]->val_real(); if ((null_value=(args[0]->null_value || value < 0))) return 0.0; /* purecov: inspected */ return sqrt(value);   //系统库中的函数}

[LeetCode] Sqrt(x)

Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. 解题思路: 这道题是求x的平方根. 解法1:基本的想法就是枚举,从1到n进行遍历,直到result*result>x,那么结果就是result-1. class Solution { public: int mySqrt(int x) { int result = 0; while((long long)result * result <= x

LeetCode:Sqrt(x) 解题报告

Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. SOLUTION 1: 参见:二分法总结,以及模板:http://t.cn/RZGkPQc 1 public class Solution { 2 public int sqrt(int x) { 3 if (x == 1 || x == 0) { 4 return x; 5 } 6 7 int left = 1; 8 int right = x

C2668: &#39;sqrt&#39; : ambiguous call to overloaded function(sqrt问题)

第一次做csdn上面的题目,自信满满没有在线编译(本地测试通过),直接提交了,竟然没拿到分,太坑了,出现这个问题C2668: 'sqrt' : ambiguous call to overloaded function 究其原因竟然是sqrt( x )这个出错 sqrt函数定义:double sqrt( double x); 换成 sqrt( (double) x )就行了 可惜没拿到分啊 C2668: 'sqrt' : ambiguous call to overloaded function

Sqrt(x) Leetcode

Implement int sqrt(int x). Compute and return the square root of x. 小小的一道题竟然做了半天...= = 乘法啊加法啊reverse这些一定要考虑到越界的问题. 另外可以使用start + 1 < end的条件,这个时候一般跳出循环之后要判断一下边界值. public class Solution { public int mySqrt(int x) { if (x == 0) { return 0; } int start =