JavaScript实现算术平方根算法-代码超简单
前几天看见了一个来自雷神之槌的平方根源码,原理多方有介绍,不赘述。
源码是c语言写的,我思考后发现这样的算法在javascript中也是可以完成的。
function InvSqrt(x){ var h=0.5*x; var b=new ArrayBuffer(4); var d=new DataView(b,0); d.setFloat32(0,x); var i=d.getInt32(0); i=0x5f375a86-(i>>1); d.setInt32(0,i); var r=d.getFloat32(0); r=r*(1.5-h*r*r); return r; }
测试:
console.time("t"); for(var i=0;i<10000000;i++){ InvSqrt(i); } console.timeEnd("t"); console.time("t"); for(var i=0;i<10000000;i++){ 1/Math.sqrt(i); } console.timeEnd("t"); VM2303:18 t: 33438.000ms VM2303:24 t: 16720.000ms
虽然结果还是比系统库慢,而且精度本来就低。不过我很满意。
以上就是用javascript实现算术平方根算法算法,怎么样,代码很简单吧,需要的朋友快来学习吧。!
相关推荐
-
深入理解JavaScript中的浮点数
js只有一种数值型数据类型,不管是整数还是浮点数,js都把归为数字. typeof 17; // "number" typeof 98.6; // "number" typeof –2.1; // "number" js中的所有数字都是双精度浮点数.是由IEEE754标准制定的64位编码数字(这个是什么东东,不知道,回头查一下吧) 那么js是如何表达整数的,双精度浮点数可以完美地表示高达53位精度的整数(没有什么概念,没处理过多大的数据,没用
-
js浮点数精确计算(加、减、乘、除)
复制代码 代码如下: <SPAN style="FONT-SIZE: 18px">//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".&
-
javascript将浮点数转换成整数的三个方法
Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseInt 位运算符 Math.floor Math.ceil Description 一.parseInt 1. 实例 parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")//13 parseInt("070&
-
js判断输入是否为正整数、浮点数等数字的函数代码
1.下面列出了一些判读数值类型的正则表达式 复制代码 代码如下: /^\d+$/ //非负整数(正整数 + 0) /^[0-9]*[1-9][0-9]*$/ //正整数 /^((-\d+)|(0+))$/ //非正整数(负整数 + 0) /^-[0-9]*[1-9][0-9]*$/ //负整数 /^-?\d+$/ //整数 /^\d+(\.\d+)?$/ //非负浮点数(正浮点数 + 0) /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0
-
JavaScript浮点数及运算精度调整详解
JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的. 十进制 二进制 0.1 0.0001 1001 1001 1001 - 0.2 0.0011 0011 0011 0011 - 0.3 0.0100 1100 1100 1100 - 0.4
-
JavaScript检查数字是否为整数或浮点数的方法
本文实例讲述了JavaScript检查数字是否为整数或浮点数的方法.分享给大家供大家参考.具体如下: 检查是否为整数: function isInt(n) { return typeof n === 'number' && n % 1 == 0; } // or ,this support ie3 function isInt(n) { return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) &
-
javaScript实现浮点数转十六进制字符
最近一个嵌入式项目中需要WEB功能,因此想到利用HTML+JavaScript实现一些参数配置功能,参数由JavaScript生成十六进制数据,通过POST提交给单片机,然后再直接使用,以充分利用浏览器的计算能力. 由于JavaScript对浮点数的支持很弱,直接使用浮点数转十六进制功能,双不能实现平常在C语言中实现的4字节的存储表示法,通过搜索,并没有找到相关功能代码,在Node.js的Buffer类可以实现此功能,但又没办法使用(单片机存储空间有限),也没办法找到具体是如何实现的(看不太懂)
-
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
本文实例讲述了javascript基于牛顿迭代法实现求浮点数的平方根.分享给大家供大家参考,具体如下: 今天在网上看到一则利用牛顿迭代法求浮点数的平方根的方法,发现很好,比一些语言自带的sqrt方法运行要快,在这里备份一下,以待后用,这里稍微做了些改动. 首先是牛顿迭代法原理: 比如我们要求a的平方根,首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代几次后x的值就已经相当精确了. 如我们要求的数学假设为 a=7, var x=a; ( 7 + 7/7 ) / 2 = 3.642
-
js浮点数保留两位小数点示例代码(四舍五入)
复制代码 代码如下: var changeTwoDecimal_f= function (floatvar){ var f_x = parseFloat(floatvar); if (isNaN(f_x)){ return '0.00'; } var f_x = Math.round(f_x*100)/100; var s_x = f_x.toString(); var pos_decimal = s_x.indexO
-
在JavaScript中使用开平方根的sqrt()方法
这个方法返回一个数的平方根.如果数的值是负的,开方返回NaN. 语法 Math.sqrt( x ) ; 下面是参数的详细信息: x: 一个数字 返回值: 返回一个数字的正弦值. 例子: <html> <head> <title>JavaScript Math sqrt() Method</title> </head> <body> <script type="text/javascript"> var
-
Javascript中浮点数相乘的一个解决方法
Javascript中的浮点数相乘是个很有意思的事情. 浮点数相乘有很多方式,下面是我给出的一个我自己认为不错的解决方案: 复制代码 代码如下: function FxF(f1, f2) { f1 += ''; f2 += ''; var f1Len = f1.split('.')[1].length, f2Len = f2.split('.')[1].length; if (f1Len) { f1 = f1.replace('.', '');
随机推荐
- 如何创建一个PDF文件?
- JavaScript面向对象编写购物车功能
- 实例讲解Java设计模式编程中的OCP开闭原则
- python实现分析apache和nginx日志文件并输出访客ip列表的方法
- 不间断循环滚动效果的实例代码(必看篇)
- JavaScript之DOM插入更新删除_动力节点Java学院整理
- JS实现的打字机效果完整实例
- PHP redis实现超迷你全文检索
- MySQL函数一览_MySQL函数全部汇总
- Android IPC机制绑定Service实现本地通信
- Android ksoap调用webservice批量上传多张图片详解
- Python2中的raw_input() 与 input()
- Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
- MySQL笔记之修改数据的解决方法
- C#操作读取、写入XML文档的实用方法
- JS实现加载和读取XML文件的方法详解
- 浅谈Java转义符\\|
- .httacces文件的配置技巧
- Android平台下轻量级http网络传输库
- Python简单实现两个任意字符串乘积的方法示例