C#,数值计算,求平方根之巴比伦算法(Babylonian algorithm)的源代码

平方根的巴比伦算法。

1 巴比伦算法介绍一

巴比伦算法可能算是最早的用于计算$sqrt{S}$的算法之一,因为其可以用牛顿法导出,因此在很多地方也被成为牛顿法。其核心思想在于为了计算x的平方根,可以从某个任意的猜测值g开始计算。在真实的运算中,我们往往将g直接设置为x,不过也可以选择其他任何的正数值。那么其计算的迭代过程为:

1.如果猜测值g已经足够接近于正确的平方根,算法结束,函数将g作为结果返回。

2.如果猜测值g不够精确,那么使用gx/g的平均值作为新的猜测值。因为这两个值中的一个小于确切的平方根,另一个则大于确切的平方根,选择平均值有助于你得到一个更接近于正确答案的值。

3.把新的猜测值赋予给变量g,重复第一步的判断。

2 巴比伦算法介绍二

1.    假设要求a的平方根,先找到一个近似值x0,如a/2;

2.    被开方数a除以近似值x0;

3.    求第一步和第二步得到的值的平均数;

4.    令平均数为新的近似值,返回第二步,循环计算(根据精度要求,进行循环控制)

经过前面四个步骤,可以得到如上公式;

对公式的理解:可以把xn理解为x0,xn+1理解为x1,然后套用公式即可。

3 核心代码

/// <summary>
/// 计算 v 的平方根
/// 据说来自于远古巴比伦时代的算法
/// </summary>
/// <param name="v"></param>
/// <returns></returns>
public static double Sqrt(double v)
{
    const double e = 0.000001;
    double x = v;
    double y = 1.0;
    while ((x - y) > e)
    {
        x = (x + y) / 2;
        y = v / x;
    }
    return x;
}
 

---------------------------------------------
POWER BY TRUFFER.CN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

屏幕截图--Snagit

Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像&#xff0c;还能获得动态的图像和声音。软件界面干净清爽&#xff0c;功能板块一目了然&#xff0c;为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…

探索Flutter中常用的系统组件

Flutter 是一款强大的开源移动应用框架&#xff0c;其丰富的系统组件使得开发者可以轻松构建漂亮且高性能的移动应用。在本文中&#xff0c;我们将深入探讨一些常用的 Flutter 系统组件&#xff0c;帮助开发者更好地理解和应用它们。 1. Scaffold&#xff08;脚手架&#xff0…

Linux命令入门及ls命令

由于大家第一次接触到Linux命令&#xff0c;故此篇会详细讲述什么是命令&#xff0c;什么又是命令行&#xff1f;Linux命令的基础结构&#xff0c;什么是工作目录&#xff0c;什么又是HOME目录&#xff1f;并且带大家熟悉ls命令的基础使用。 1.命令和命令行 命令行&#xff1a…

使用spring cloud gateway作为服务网关

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架&#xff0c;取代Zuul网关。网关作为流量的&#xff0c;在微服务系统中有着非常作用&#xff0c;网关常见的功能有路由转发、权限校验、限流控制等作用。 gateway需要注册到nacos中去&#xff0c;需要引入以下的依…

【PgSQL】聚合函数string_agg

在工作中&#xff0c;遇到了这样的需求&#xff0c;需要根据某一个字段A分组查询&#xff0c;统计数量&#xff0c;同时还要查询另一个字段B&#xff0c;但是呢这个字段B在分组后的记录中存在不同的值。最开始不知道有聚合函数可以实现这一功能&#xff0c;在代码中进行了处理。…

[嵌入式C][入门篇] 快速掌握基础3 (运算符)

开发环境&#xff1a; 网页版&#xff1a;跳转本地开发(Vscode)&#xff1a;跳转 文章目录 一、 简介二、算术运算符&#xff08;1&#xff09;示例代码&#xff1a;&#xff08;2&#xff09;和--的先后顺序&#xff08;直接看效果&#xff09; 三、逻辑运算符(1)示例代码 四…

网络对讲终端 网络音频终端 网络广播终端SV-7011V使用说明

高速路sip广播对讲求助 隧道sip对讲调度SIP-7011 网络广播终端SV-7011 壁挂式对讲终端网络监听终端SIP广播终端 sip语音对讲终端SIP-7011 SV-7011网络对讲终端网络对讲、网络厂播、监听 SV-7101网络解码终端提供一路线路输出接功放或有源音箱。 SV-7102网络解码广播终端两…

HNU-数据库系统-讨论课2

第二次小班讨论课安排如下: 主题: 数据库系统设计与应用开发。 目的&#xff1a;让学生通过练习和讨论充分掌握数据库系统的设计与应用开发。 内容: 设计和实现一个数据库及应用系统。设计内容包括系统分析、系统设计、 数据库设计&#xff08;需求分析、概念结构设计、逻辑…

Ranger UserSync

作用 同步User到RangerDb 架构 解析 启动一个while(True) 进程定时同步&#xff0c;程序入口 source sink 掉接口获取Ranger User 并且Cache 计算delta 同步

JavaScript基础(24)_dom查询练习(一)

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><link rel"stylesheet" href"../browser_default_style/reset.css"><title>dom查询练习一</title><style>.text {widt…

Anaconda 环境中安装OpenCV (cv2)

1、使用Anaconda 的对应环境&#xff0c;查看环境中的Python版本号 (1)使用Anaconda 查看存在的环境&#xff1a;conda info --env (2)激活环境&#xff1a;conda activate XXX 2、根据版本号&#xff0c;下载对应的 python-opencv 包 &#xff08;1&#xff09;选择国内源的…

【算法Hot100系列】括号生成

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧&#xff0c;并且能够自动缓存图片数据&#xff0c;减少网络请求。Glide 具有良好的性能和易用的 API&#xff0c;支持常见的图片加载需求&#xff0c;例如图片压缩、…

scroll、offset、client —— JS三大家族

简介&#xff1a; clientHeight: 元素的可见高度&#xff0c;不包括边框和滚动条&#xff0c;是相对于视口的大小——clientHeight (content height) (padding toppadding bottom)。offsetHeight: 元素的高度&#xff0c;包括边框和滚动条&#xff0c;但不包括外边距 —— o…

即时设计:设计流程图,让您的设计稿更具条理和逻辑

流程图小助手 在设计工作中&#xff0c;流程图是一种重要的工具&#xff0c;它可以帮助设计师清晰地展示设计思路和流程&#xff0c;提升设计的条理性和逻辑性。今天&#xff0c;我们要向您推荐一款强大的设计工具&#xff0c;它可以帮助您轻松为设计稿设计流程图&#xff0c;让…

研旭开发板资料下载地址--DSP28335资料

研旭电气开发板网盘资料 温馨提示:南京研旭提供两种网盘下载方式,第一种是奶牛快传(下载速度快,但偶尔会出现下载不了的情况),第二种是百度网盘(下载速度较慢,偶尔会出现链接失效的情况),请自行选择合适的下载方式,如有其它问题请旺旺联系客服解决哦! 1、研旭F28…

MIT 6.s081 实验解析——labs2

系列文章目录 MIT 6.s081 实验解析——labs1 MIT 6.s081 实验解析——labs2 文章目录 系列文章目录测试判断流程System call tracingsysinfo![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ab9ca34f1fc64b6aa1df74613dc1a397.png) 测试判断流程 完成代码后将.c文…

【温故而知新】JavaScript的数组常用方法

一、概念 在JavaScript中&#xff0c;数组是一种数据结构&#xff0c;用于存储和操作有序的元素集合。这些元素可以是不同的数据类型&#xff0c;包括数字、字符串、布尔值、对象或函数等。 JavaScript中的数组具有以下特点&#xff1a; 动态长度&#xff1a;JavaScript的数…

MyBatis接口的方法上使用,定义对应的 SQL 操作

目录标题 一、Mapper&#xff1a;二、Select、Insert、Update、Delete&#xff1a;三、Results、Result&#xff1a;四、Param&#xff1a;五、# 和 $&#xff1a; MyBatis 是一款基于 Java 的持久层框架&#xff0c;它通过简化数据库操作来帮助开发者构建更好的数据库访问应用…

day08 反转字符串 反转字符串Ⅱ 替换数字 翻转字符串里的单词 右旋转字符串

题目1&#xff1a;344 反转字符串 题目链接&#xff1a;344 反转字符串 题意 字符串是数组的形式&#xff0c;使用O(1)的空间将字符串反转 双指针法 法一 代码 class Solution { public:void reverseString(vector<char>& s) {for(int i0,js.size()-1;i<s.s…