企业网站的常见类型有学网站建设工作室

bicheng/2026/1/18 14:27:02/文章来源:
企业网站的常见类型有,学网站建设工作室,WordPress 简历库,数据交换平台我们平时经常会有一些数据运算的操作#xff0c;需要调用sqrt#xff0c;exp#xff0c;abs等函数#xff0c;那么时候你有没有想过#xff1a;这个些函数系统是如何实现的#xff1f;就拿最常用的sqrt函数来说吧#xff0c;系统怎么来实现这个经常调用的函数呢#xf… 我们平时经常会有一些数据运算的操作需要调用sqrtexpabs等函数那么时候你有没有想过这个些函数系统是如何实现的就拿最常用的sqrt函数来说吧系统怎么来实现这个经常调用的函数呢 虽然有可能你平时没有想过这个问题不过正所谓是“临阵磨枪不快也光”你“眉头一皱计上心来”这个不是太简单了嘛用二分的方法在一个区间中每次拿中间数的平方来试验如果大了就再试左区间的中间数如果小了就再拿右区间的中间数来试。比如求sqrt(16)的结果你先试016/288*86464比16大然后就向左移试08/244*416刚好你得到了正确的结果sqrt(16)4。然后你三下五除二就把程序写出来了 //用二分法 float SqrtByBisection(float n) { //小于0的按照你需要的处理 if(n 0) return n; float mid,last; float low,up; low0,upn; mid(lowup)/2; do{if(mid*midn)upmid; else lowmid;lastmid;mid(uplow)/2; }//精度控制while(abs(mid-last) eps);return mid; } 然后看看和系统函数性能和精度的差别其中时间单位不是秒也不是毫秒而是CPU Tick不管单位是什么统一了就有可比性。二分法和系统的方法结果上完全相同但是性能上整整差了几百倍。为什么会有这么大的区别呢难道系统有什么更好的办法难道。。。。哦对了回忆下我们曾经的高数课曾经老师教过我们“牛顿迭代法快速寻找平方根”或者这种方法可以帮助我们具体步骤如下。 求出根号a的近似值首先随便猜一个近似值x然后不断令x等于x和a/x的平均数迭代个六七次后x的值就已经相当精确了。例如我想求根号2等于多少。假如我猜测的结果为4虽然错的离谱但你可以看到使用牛顿迭代法后这个值很快就趋近于根号2了 ( 4 2/4 ) / 2 2.25 ( 2.25 2/2.25 ) / 2 1.56944.. ( 1.56944.. 2/1.56944..) / 2 1.42189.. ( 1.42189.. 2/1.42189..) / 2 1.41423.. ....这种算法的原理很简单我们仅仅是不断用(x,f(x))的切线来逼近方程x^2-a0的根。根号a实际上就是x^2-a0的一个正实根这个函数的导数是2x。也就是说函数上任一点(x,f(x))处的切线斜率是2x。那么x-f(x)/(2x)就是一个比x更接近的近似值。代入 f(x)x^2-a得到x-(x^2-a)/(2x)也就是(xa/x)/2。 相关的代码如下 float SqrtByNewton(float x) {// 最终float val x;// 保存上一个计算的值float last;do{last val;val (val x/val) / 2;}while(abs(val-last) eps);return val; }牛顿迭代法性能提高了很多可是和系统函数相比还是有这么大差距这是为什么呀想啊想啊想了很久仍然百思不得其解。突然有一天我在网上看到一个神奇的方法于是就有了今天的这篇文章废话不多说看代码先 float InvSqrt(float x) {float xhalf 0.5f*x;int i *(int*)x; // get bits for floating VALUE i 0x5f375a86- (i1); // gives initial guess y0x *(float*)i; // convert bits BACK to floatx x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyx x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyx x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyreturn 1/x; }这次真的是质变了结果竟然比系统的还要好。到现在你是不是还不明白那个“鬼函数”到底为什么速度那么快吗不急先看看下面的故事吧 Quake-III Arena (雷神之锤3)是90年代的经典游戏之一。该系列的游戏不但画面和内容不错而且即使计算机配置低也能极其流畅地运行。这要归功于它3D引擎的开发者约翰-卡马克John Carmack。事实上早在90年代初DOS时代只要能在PC上搞个小动画都能让人惊叹一番的时候John Carmack就推出了石破天惊的Castle Wolfstein, 然后再接再励doom, doomII, Quake...每次都把3-D技术推到极致。他的3D引擎代码资极度高效几乎是在压榨PC机的每条运算指令。当初MS的Direct3D也得听取他的意见修改了不少API。 最近QUAKE的开发商ID SOFTWARE 遵守GPL协议公开了QUAKE-III的原代码让世人有幸目睹Carmack传奇的3D引擎的原码。这是QUAKE-III原代码的下载地址 http://www.fileshack.com/file.x?fid7547。我们知道越底层的函数调用越频繁。3D引擎归根到底还是数学运算。那么找到最底层的数学运算函数在game/code/q_math.c 必然是精心编写的。里面有很多有趣的函数很多都令人惊奇估计我们几年时间都学不完。在game/code/q_math.c里发现了这样一段代码。它的作用是将一个数开平方并取倒经测试这段代码比(float)(1.0/sqrt(x))快4倍 float Q_rsqrt( float number ) {long i;float x2, y;const float threehalfs 1.5F;x2 number * 0.5F;y number;i * ( long * ) y; // evil floating point bit level hackingi 0x5f3759df - ( i 1 ); // what the fuck?y * ( float * ) i;y y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration// y y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed#ifndef Q3_VM#ifdef __linux__assert( !isnan(y) ); // bk010122 - FPE?#endif#endifreturn y; } 函数返回1/sqrt(x)这个函数在图像处理中比sqrt(x)更有用。注意到这个函数只用了一次叠代其实就是根本没用叠代直接运算。编译实验这个函数不仅工作的很好而且比标准的sqrt()函数快4倍要知道编译器自带的函数可是经过严格仔细的汇编优化的啊 这个简洁的函数最核心也是最让人费解的就是标注了“what the fuck?”的一句i 0x5f3759df - ( i 1 ); 再加上y y * ( threehalfs - ( x2 * y * y ) ); 两句话就完成了开方运算而且注意到核心那句是定点移位运算速度极快特别在很多没有乘法指令的RISC结构CPU上这样做是极其高效的。 算法的原理其实不复杂,就是牛顿迭代法,用x-f(x)/f(x)来不断的逼近f(x)a的根。 没错一般的求平方根都是这么循环迭代算的但是卡马克(quake3作者)真正牛B的地方是他选择了一个神秘的常数0x5f3759df 来计算那个猜测值就是我们加注释的那一行那一行算出的值非常接近1/sqrt(n)这样我们只需要2次牛顿迭代就可以达到我们所需要的精度。好吧如果这个还不算NB接着看 普渡大学的数学家Chris Lomont看了以后觉得有趣决定要研究一下卡马克弄出来的这个猜测值有什么奥秘。Lomont也是个牛人在精心研究之后从理论上也推导出一个最佳猜测值和卡马克的数字非常接近, 0x5f37642f。卡马克真牛他是外星人吗 传奇并没有在这里结束。Lomont计算出结果以后非常满意于是拿自己计算出的起始值和卡马克的神秘数字做比赛看看谁的数字能够更快更精确的求得平方根。结果是卡马克赢了... 谁也不知道卡马克是怎么找到这个数字的。 最后Lomont怒了采用暴力方法一个数字一个数字试过来终于找到一个比卡马克数字要好上那么一丁点的数字虽然实际上这两个数字所产生的结果非常近似这个暴力得出的数字是0x5f375a86。 Lomont为此写下一篇论文Fast Inverse Square Root。 论文下载地址http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf http://www.matrix67.com/data/InvSqrt.pdf。 最后给出最精简的1/sqrt()函数 float InvSqrt(float x) {float xhalf 0.5f*x;int i *(int*)x; // get bits for floating VALUE i 0x5f375a86- (i1); // gives initial guess y0x *(float*)i; // convert bits BACK to floatx x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracyreturn x; } 大家可以尝试在PC机、51、AVR、430、ARM、上面编译并实验惊讶一下它的工作效率。 前两天有一则新闻大意是说 Ryszard Sommefeldt 很久以前看到这么样的一段 code (可能出自 Quake III 的 source code) float InvSqrt (float x) {float xhalf 0.5f*x;int i *(int*)x;i 0x5f3759df - (i1);x *(float*)i;x x*(1.5f - xhalf*x*x);return x; }他一看之下惊为天人想要拜见这位前辈高人但是一路追寻下去却一直找不到人同时间也有其他人在找虽然也没找到出处但是 Chris Lomont 写了一篇论文 (in PDF) 解析这段 code 的算法 (用的是 Newton’s Method牛顿法比较重要的是后半段讲到怎么找出神奇的 0x5f3759df 的)。 PS. 这个 function 之所以重要是因为求 开根号倒数 这个动作在 3D 运算 (向量运算的部份) 里面常常会用到如果你用最原始的 sqrt() 然后再倒数的话速度比上面的这个版本大概慢了四倍吧… XD PS2. 在他们追寻的过程中有人提到一份叫做 MIT HACKMEM 的文件这是 1970 年代的 MIT 强者们做的一些笔记 (hack memo)大部份是 algorithm有些 code 是 PDP-10 asm 写的另外有少数是 C code (有人整理了一份列表)。 好了故事就到这里结束了希望大家能有有收获:)

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

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

相关文章

阜宁做网站工作室网站设计说明

电子电器架构车载软件 —— 集中化架构软件开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任…

做网站卖水果哪里进货建立拼音

本文地址:https://blog.csdn.net/t163361/article/details/135024136 针对工作中遇到的优化问题,记录一下,给大家优化自己的项目提供一些思路。 公司产品最近正给国内某大型赛事做支撑服务暴露出不少问题。 使用环境 Unity 2021.3.0f1 cpu…

国内免费建站网站天津网站备案

参考 HTTP发展史 HTTP/0.9 - 单行协议 问世于1990年,那时的HTTP非常简单: 只支持GET方法; 没有首部; 只能获取纯文本 HTTP/1.0 - 搭建协议的框架 1996年,HTTP正式被作为标准公布,版本为HTTP/1.0。1.0版本增加了首部、状态码、权限、缓存、长连接(默认短连接)等规范,可以说搭建…

成都网页设计与网站建设网页设计作业报告范文

公众号:全干开发 。 专注分享简洁但高质量的动图技术文章! 回顾 在上节内容中,我们实现了用户开户的功能createAccount public void start(){System.out.println("欢迎您进入到了ATM系统");System.out.println("1、用户登录&…

福州网站建设seo什么网站做h5没有广告

P5748 集合划分计数 求解从1到1e5的所有贝尔数,我们可以利用生成函数求解,就是利用指数型生成函数求解 代码细节: 首先虽然exe^xex代表全是1,但是多项式下面还有阶乘逆元的系数,然后乘完之后,我们还有乘…

网站主色调简介怎么说宁波seo行者seo09

题目描述 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 各组的核桃数量必须相同各组内必须能平分核桃(当…

wordpress做商城网站php网站开发环境的设置

errAxiosError: Request failed with status code 405 前端调用接口的方法跟后台定义接口的方法不一致

网站技术开发文档模板免费个人网页模板

并查集 Tarjan 算法 并查集是一种用于找出一个森林(图)中树(连通分支)的个数的算法,也可用于判断两个节点是否在同一棵树上。它在每一棵树(连通分支)上选择一个节点作为本棵树(连通…

电商网站开发企业黄岛网站建设公司哪家好

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先有一个贪心策略就是每次都找一个叶子节点最多的点&#xff0c;让后删掉他的kkk个叶子节点&#xff0c;现在我们就来考虑如何模拟这个过程。 我们整一个vector<set<int>>ve…

想要网站推广页网站需要维护

cdh 5.12.1 安装 目前还未成功&#xff0c;仅供个人记录。【下载必备工具】当前系统为win7_x641、vmware虚拟机12.52、ubuntu16.04服务器版本3、windows下的ssh工具&#xff0c;采用git bash4、jdk安装包jdk-8u144-linux-x64.tar.gz5、mysql java驱动包 mysql-connector-java-5…

三亚市建设局网站网页制作与设计网课

C11引入了lambda表达式&#xff0c;使得程序员可以定义匿名函数&#xff0c;该函数是一次性执行的&#xff0c;既方便了编程&#xff0c;又能防止别人的访问。 Lambda表达式的语法通过下图来介绍&#xff1a; Lambda表达式的引入标志&#xff0c;在‘[]’里面可以填入‘’或‘&…

做兼职最好的网站烟台网站关键词推广

1、递归算法定义递归算法是将重复问题分解为同类的子问题而解决问题的方法&#xff0c;其核心思想是分治策略。简单来说就是自己调用自己。直到达到退出递归的条件&#xff0c;则完成递归。2、递归的步骤1、找整个递归的终止条件&#xff1a;递归应该在什么时候结束&#xff1f…

抄底券网站怎么做的手机网站发号系统源码

前言 本文介绍了一些关于神经网络可视化的项目&#xff0c;主要有CNN解释器&#xff0c;特征图、卷积核、类可视化的一些代码和项目&#xff0c;结构可视化工具&#xff0c;网络结构手动画图工具。 CNN解释器 这是一个中国博士发布的名叫CNN解释器的在线交互可视化工具。 主要…

网站的优化从几个方面宁夏住房和城乡建设厅网站办事窗口

在Vue中&#xff0c;深度监听&#xff08;deep watching&#xff09;是指对对象或数组进行递归观察其变化的过程。这可以通过watch选项来实现。 当你想要监听一个对象或数组的每个属性或元素的变化时&#xff0c;Vue提供了deep选项。通过将deep设置为true&#xff0c;Vue会递归…

做网站和APP需要多少钱贵州网站建设设计公司

1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏&#xff0c;找出油漆围栏的方法&#xff0c;使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的&#xff0c;所以返回10^97的模。 计算结果&#xff1a; 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…

问卷调查网站赚钱wordpress-5.0.3

在对Java和Groovy代码进行的各种代码审查中&#xff0c;我经常看到魔术数字和其他随机字符串在整个代码库中乱七八糟。 例如&#xff0c;魔术数字是下面的代码&#xff08;Groovy&#xff09;中的4.2&#xff1a; if (swashbuckle > 4.2) {... }4.2是什么意思&#xff1f;…

免费建设网站那个好有什么网站可以做电子

文章目录 三相异步电机动态数学模型及矢量控制仿真1、异步电机三相方程2、坐标变换3、磁链3/2变换推导4、两相静止坐标系下的方程5、两相旋转坐标系下的方程6、以 ω-is-Ψr 为状态变量的状态方程7、矢量控制及 matlab 仿真 原文链接需要仿真的同学请关注【Qin的学习营地】 三相…

成都网站建设138百度怎么注册店面地址

前言 最近在微信小程序开发时遇到了一个非常复杂的动画&#xff0c;如果要手搓的话需要用canvas一点点弄&#xff0c;比较麻烦&#xff0c;于是打算做一个gif来实现动画效果 根据需求&#xff0c;动画只需播放一次即可&#xff0c;并且设置了一个重播按钮&#xff0c;点击即可重…

开发网站合同什么是网络营销产生的技术基础

一、介绍&#xff1a; 1、背景&#xff1a; 在 Redis 的 2.6 以上版本中&#xff0c;除了可以使用命令外&#xff0c;还可以使用 Lua 语言操作 Redis。 Redis 命令的计算能力并不算很强大&#xff0c;而使用 Lua 语言则在很大程度上弥补了 Redis 的这个不足。 2、特点&#…

h5做网站教程做彩票网站

一、MongoDB简介 1.1 MongoDB介绍 MongoDB是一个强大、灵活&#xff0c;且易于扩展的通用型数据库。MongoDB是C编写的文档型数据库&#xff0c;有着丰富的关系型数据库的功能&#xff0c;并在4.0之后添加了事务支持。 随着存储数据量不断的增加&#xff0c;开发者面临一个困…