手算平方根

有些丧心病狂的数学题目要求平方根。。大概值没给出做精确到某一位。。于是我机智地用牛顿迭代233...(话说我pi背到一百多位真是蛋疼。。)

例:求$\sqrt{18}$:

Initial guess: 4 //4*4=16x = 4x = (4 + 18 / 4)/2 = 4.25x = (x + 18 / x)/2 ~ 4.242647x - (x + 18 / x)/2 ~ 4.242641 //差不多了233

-----------一个相当接近sqrt(17)的分数-----------8340353015645794683299462704812268882126086134656108363777
──────────────────────────────────────────────────────────
2022832731673317417391502561215986991699553462632778473728

 ~ 4.123105625617660549821409855974077025147199225373620434398633573094954346337621593587863650810684297

客官的$\sqrt{3}$:

1.7320508075688772935274463415058723669428052538103806280558069794519330169088
000370811461867572485756756261414154067030299699450949989524788116555120943736
485280932319023055820679748201010846749232650153123432669033228866506722546689
218379712270471316603678615880190499865373798593894676503475065760507566183481
296061009476021871903250831458295239598329977898245082887144638329173472241639
845878553976679580638183536661108431737808943783161020883055249016700235207111
442886959909563657970871684980728994932964842830207864086039887386975375823173
178313959929830078387028770539133695633121037072640192491067682311992883756411
414220167427521023729942708310598984594759876642888977961478379583902288548529
035760338528080643819723446610596897228728652641538226646984200211954841552784
411812865345070351916500166892944154808460712771439997629268346295774383618951
101271486387469765459824517885509753790138806649619119622229571105552429237231
92197738262561631468842032853716682938649611917049738836395495938
时间: 2024-10-20 21:01:41

手算平方根的相关文章

手算平方根的正确方法

手算平方根的「正确」方法,是什么方法?如果你认为是牛顿迭代法的话,你可以亲自试一下,看看效果如何: (原帖 kz3007407872, 鉴于百度贴吧的帖子是公开的,我就不打码了) 其实牛顿迭代法非常好,在电脑上快得飞起.但是手算就不行了. 那么「正确」的方法是什么呢?是这个: (原帖同上) 说得神神叨叨的,还能开无限小数,到底是什么方法?帖子里没说. 不过,幸运的是,我有一天翻 Wiki 的时候,碰巧翻到了这个方法.本文将详细介绍这个方法. \(2\) 的算术平方根是多少?是 \(\sqrt{2

平方根的C语言实现(二) —— 手算平方根的原理

一个函数从数学上来说可以有无数个函数列收敛于这个函数,那么程序逼近实现来说可以有无数种算法,平方根自然也不例外. 不知道有多少人还记得手算平方根,那是满足每次在结果上添加一位,也就是按位逼近运算结果的唯一算法.至于数学上如何证明这个唯一性我就不说了,数学证明不会有那么多人有兴趣.按位逼近更加适合手算,举个大家更熟悉的例子,那就是手算除法.我这里就采用按位逼近的手算方法. 要说手算平方根,原理其实非常简单, 一是平方根函数是严格单调增函数, 二就是以下这个恒等式满足 (a*N+b)2 ≡ (a*N

UVA 10023 - Square root(手算平方根)

题目:UVA 10023 - Square root(手算平方根) 题目链接 题目大意:求给定的一个数的平方根. 解题思路:用二分但是这个数太大了,就超时了.看题接后发现需要用一种手算平方根的算法. 算法: 先判断这个数是不是偶数位,是的话就第一次取前面的两位数,不是的话第一次就只取前面的一位数来作为被除数.接下来就是两位两位为一节来计算. 用前一次的计算结果乘上20+一个个位数a再乘上这个a,找到最大的a使得这个式子的结果不大于被除数. 被除数减去这个结果然后再在尾巴接上那个大数的接下来两位作

平方根的C语言实现(三) ——最终程序实现

了解了浮点数的存储以及手算平方根的原理,我们可以考虑程序实现了. 先实现一个64位整数的平方根,根据之前的手算平方根,程序也不是那么难写了. #include <stdint.h>uint64_t _sqrt_u64(uint64_t a) { int i; uint64_t res; uint64_t remain; //0的平方根是0,特殊处理一下 if(a == 0ull) return 0ull; //找到最高位的1,并且产生平方根结果最高位的1 for(i=62;;i-=2) if(

牛顿迭代法求解平方根

牛顿迭代法求解平方根 2015-05-16 10:30 2492人阅读 评论(1) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一个实例 迭代简介 牛顿迭代法 牛顿迭代法简介 简单推导 泰勒公式推导 延伸与应用 一个实例 //java实现的sqrt类和方法 public class sqrt { public static double sqrt(double n) { if (n<0) return Double.NaN; double err = 1e

计蒜课_二分法求平方根

教训:代码一直通不过的也许因为数据类型(在本题中int改为long),而不是逻辑问题: 代码如下: 1 #include<iostream> 2 using std::endl; 3 using std::cout; 4 using std::cin; 5 inline bool isRes(long x,long y){//判断 x是否为y的平方根: 6 return (x*x==y)||((x*x<y)&&((x+1)*(x+1)>y)); 7 } 8 int

高精度问题之大数相加(原来就是用字符串相加,模拟手算这么简单!)

解题心的: 就是基本的一对一模拟手算..借助c++的string 不用逆序运算了.很方便的补0.  最后处理下前导0的问题. #include <iostream> #include <string> using namespace std; // 实现大数相加 结果存放在num中 void bigIntergerAdd(string &num, string add) { int goBit = 0; // 存放进位 // 先交换下顺序 加数的位数要比较少 if (num

经典算法:牛顿迭代法求平方根

//牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/(2*x); 7 y = x*x-num; 8 if(y<0) y = -y; 9 } while(y>0.0001); 10 return x; 11 } 12 int main(int argc, char* argv[]) 13 { 14 printf("%.3f",my

牛顿迭代法是如何求平方根的

看<SICP>,提到牛顿迭代(Newton's method)求平发根,有一些想法,记下来 比如给出的数字是 y假设其平方根为 gy 猜想一个数字 x 如果 x==gy,那 y/x==gy 下面重点来了,如果 x!=gy 可能 x<gy,y/x>gy 或者 x>gy,y/x<gy 一大一小,故 (x+y/x)/2 比 x 更接近 gy不断迭代…… --date: 2014-12-22