浮点数开方的快速计算的代码是:

double fast2(double x)
{union P {double x;unsigned long i[2];};double a;union P x0;a = x/2;x0.x = x;x0.i[1] = ((x0.i[1] &(0xffefffff>>1))>>1)+(512<<20);x = x0.x/2 + a/x0.x;x = (x/2 + a/x);x = (x/2 + a/x);x = (x/2 + a/x);x = (x/2 + a/x);return x;
}

这里依然用到了牛顿迭代法。用了5次迭代。x0是初值。初值如何选取呢?由微积分课程可知,f(x)在x0的邻域内的近似值为
f(x0 +x) = f(x0) + f’(x0)*x
相应的,
sqrt(1 + x) = sqrt(1) + sqrt’(1) *x = 1 + 1/2 * x

那么,上面的移位就是取了这个值。因为浮点数的表示格式为
(s)(指数部分)(小数部分)

指数部分11位,中线是1024,1023代表0,因此移位之后还要加512,代表指数除2。小数部分52位,规格化数小数点前固定为1是不写的,所以移位的效果是对1的邻域内的x作了除2处理。最后得到 x0 = 1 +1/2 x,这就是初值。

初值是个近似值,小数低位部分的数值对计算影响忽略不计,因此没作处理。

浮点数开方运算的快速计算相关推荐

  1. c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法

    1.01 + 2.01 = 3.02 2.01 * 2.01 = 4 0401   不知你注意没有,这个很寻常的等式,你如果将它放在C++中,Java中,Basic中,它 居然是不成立的.计算机在开玩 ...

  2. 【Python基础】为何0.1+0.2≠0.3,使用Python程序深入理解计算浮点数的运算

    [Python基础]为何0.1+0.2≠0.3,使用Python程序深入理解计算机浮点数的运算 用过Python这门编程语言的应该都会发现,当我们输入0.1+0.2时,打印出来的却不是0.3,而是0. ...

  3. c语言浮点数高精度求平方根,快速高精度的二进制浮点数开平方算法

    1引盲开平方运算在用徽机.单片机等构成的实时控制系统和测量仪器中有着广泛的应用.开平方运算的实现方法有多种:如牛顿迭代法.查表法.直线逼近法(线性化方法)和减奇数法等.对于查表法,当被开方数变化范围较 ...

  4. 不使用数学函数开方运算的情况下,求解开方运算

    1 二分法 浮点开方也就是给定一个浮点数x,求.这个简单的问题有很多解,我们从最简单最容易想到的二分开始讲起.利用二分进行开平方的思想很简单,就是假定中值为最终解.假定下限为0,上限为x,然后求中值: ...

  5. python中浮点数间运算存在不确定尾数_python 浮点数类型

    - 带有小数点及小数的数字 - 浮点数取值范围和小数精度都存在限制,但常规计算可忽略 - 浮点数的取值范围数量级约为  至 浮点数间运算存在不确定尾数,这不是bug # 浮点数间运算存在不确定尾数 & ...

  6. ubuntu 使用FFTW快速计算离散傅里叶变换

    FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开 ...

  7. 关于不能够精确的对浮点数进行运算的问题

    http://edu.eoe.cn/   在线课堂 昨天看到一篇帖子说了几个很明显的简单的浮点的运算,计算机都会算错. 我引过来给大家看看:' 运行代码: System.out.println(0.0 ...

  8. 浮点数相加php,利用php怎么实现一个浮点数精确运算功能

    利用php怎么实现一个浮点数精确运算功能 发布时间:2020-12-15 16:06:03 来源:亿速云 阅读:94 作者:Leah 今天就跟大家聊聊有关利用php怎么实现一个浮点数精确运算功能,可能 ...

  9. 每天一道LeetCode-----重新实现开方运算sqrt(x),只返回整数部分即可

    Sqrt(x) 原题链接Sqrt(x) 重新实现开方运算. 因为要求实现的开方运算只需要返回整数部分即可,所以首先考虑一下当n为多少时可以返回. n是给定x的开方结果一定满足 n * n <= ...

  10. Kernel Trick——核机制,更高维空间内积的快速计算

    这是小弟的第一篇技术博客,功力尚浅,写的不准确不专业的地方,还请各位同仁,多多包涵. blog归正传. 引言 理论 1 Kernel SVM 2 2阶多项式核 3 常见核的种类 应用 1 Kernel ...

最新文章

  1. 乔布斯在斯坦福大学毕业典礼上的演讲
  2. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
  3. Linux Used内存到底哪里去了?
  4. 荆门市掇刀石中学2021高考成绩查询,2021年荆门中考所有高中学校排名 荆门重点高中分数线...
  5. scala中rdd无法join的问题
  6. php跨域资源共享,CORS 跨域资源共享
  7. .NET Core下使用gRpc公开服务(SSL/TLS)
  8. 1743. 从相邻元素对还原数组
  9. php去除英文和标点,php 过滤英文标点符号及过滤中文标点符号代码_php技巧
  10. Java ClassLoader setDefaultAssertionStatus()方法与示例
  11. 案例 银行取款 java 1615136927
  12. C++ 设计模式 —— 控制器设计模式(实现功能模块间通信)
  13. 改变Linux的DNS解析顺序(DNS到hosts)
  14. 十九、RF接口测试汇总(一)
  15. CSP -- 运营商内容劫持(广告)的终结者
  16. 移动HS8545M光猫密码
  17. 非因解读 | 单细胞空间蛋白质组分析技术揭示乳腺癌循环肿瘤细胞(CTC)与肿瘤异质性及肿瘤免疫的关系
  18. 房产电商新变数:阿里加码易居
  19. 如何理解最小二乘法?
  20. 小刘的编程学习技巧分享

热门文章

  1. Go go test测试机制介绍及实例【Go语言圣经笔记】
  2. 女性三围的检测验证js-------格式 20,30,40
  3. 【GitHub】利用Github建立你的个人网站
  4. ionic入门教程第十一课-简要说明ion-list、ion-item完成列表页ion-infinite-scroll上拉加载ion-refresher下拉刷新
  5. python爬虫爬取深交所数据
  6. JQuery fadeOut()函数与remove()函数合用时不生效的解决办法
  7. 威海之恋 mv和歌词
  8. 在GNU/Linux下将CD音乐转为mp3
  9. Markdown 插入目录索引、更改目录名称方法
  10. 计算机控制d a数模转换实验,实验一 D、A数模转换实验