[笔试题] 不使用库函数sqrt实现求一个数的平方根
来源:互联网 发布:大苗医考网官网网络班 编辑:程序博客网 时间:2024/04/29 11:38
看到这题第一想法就是二分,并且很快就能写出代码来:
double SQRT_Binary(double n){ double s = 0, t = n; if(n < 1) t = 1; while(t - s > inf) { double mid = (t + s) / 2; if(mid * mid > n) t = mid; else s = mid; } return (t + s) / 2;}
不过还有个速度更好的方法,就是牛顿迭代法。
知道了原理就很简单了,这个题目的函数是f(x² - n) = 0,套用一下上述公式,很快就能得到答案了:
下面是完整代码:
double SQRT_Newton(double n){ double x0 = n; double x1; while(1) { //x1 = -(x0 * x0 - n) / (2 * x0) + x0; x1 = (x0 * x0 + n) / (2 * x0); double val = x1 * x1 - n; if(val <= inf && val >= -inf) return x1; x0 = x1; } return 0;}
下面是完整代码:
#include<iostream>#include<cmath>using namespace std;#define inf 1e-7double SQRT_Binary(double n){ double s = 0, t = n; if(n < 1) t = 1; while(t - s > inf) { double mid = (t + s) / 2; if(mid * mid > n) t = mid; else s = mid; } return (t + s) / 2;}double SQRT_Newton(double n){ double x0 = n; double x1; while(1) { //x1 = -(x0 * x0 - n) / (2 * x0) + x0; x1 = (x0 * x0 + n) / (2 * x0); double val = x1 * x1 - n; if(val <= inf && val >= -inf) return x1; x0 = x1; } return 0;}int main(){ printf("%.6lf\n%.6lf\n", sqrt(0.5), SQRT_Binary(0.5)); printf("%.6lf\n%.6lf\n", sqrt(3), SQRT_Binary(3)); printf("\n"); printf("%.6lf\n%.6lf\n", sqrt(0.5), SQRT_Newton(0.5)); printf("%.6lf\n%.6lf\n", sqrt(3), SQRT_Newton(3)); getchar(); return 0;}
0 0
- [笔试题] 不使用库函数sqrt实现求一个数的平方根
- Java不使用Math.sqrt方法实现的求平方根
- 编写SQRT.m文件以实现求一个数的平方根
- 不使用c++内置的sqrt,求平方根
- 求一个非负数的平方根--sqrt实现
- 不用sqrt库函数求一个整数的平方根(牛顿迭代法)
- 求一个正整数N的开方,要求不能用库函数sqrt(),结果的精度在0.001(创新工场笔试题)
- [2014创新工场笔试]求一个正数的开方,不能使用库函数sqrt,精度在0.001以内即可
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- Delphi System.Sqr、System.Sqrt - 求一个数的平方与平方根
- 求方程的近似解,不用库函数求一个数的平方根
- 求一个数的平方根(C语言实现)
- 关于代码实现一个数求平方根
- 求一个正整数N的开方,要求不能用库函数sqrt(),结果的精度在0.001
- 黑马程序员—构造代码块、构造函数和静态代码块它们之.....
- html特殊字符标签 转回 特殊字符
- Firefox(火狐)好用的插件
- CCI 2.6 寻找有环链表环路的开头节点
- css 样式 去重
- [笔试题] 不使用库函数sqrt实现求一个数的平方根
- ehcache 对象缓存和页面缓存
- 2014年中科院地理所博士考试真题-地理信息系统
- Android中RelativeLayout各个属性的含义
- Java对日期Date类进行加减运算,年份加减,月份加减
- 【C语言学习】链接
- 【Android核心基础08】 - Service
- [Android] 对android:layout_weight的一些解释
- 星星