Javascript bitshift替代math.round
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript bitshift替代math.round,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1822字,纯文字阅读大概需要3分钟。
内容图文
![Javascript bitshift替代math.round](/upload/InfoBanner/zyjiaocheng/765/1f0e5641706d47bca96ed79095436177.jpg)
var1=anyInteger
var2=anyInteger
(Math.round(var1/var2)*var2)
对于上面的JavaScripts bitshift替代方法的语法是什么?
使用整数不浮动
谢谢
解决方法:
[更新]
快速回答:
var intResult =((((var1 / var2)0.5)<< 1)>> 1)* var2;
它比问题中提供的Math.round()方法更快,并提供完全相同的值.
我的测试比特移位快10到20%.下面是一些比较两种方法的更新代码.
下面的代码有四个部分:首先,它创建10,000组两个随机整数;第二,它在OP的问题中进行回合,存储该值以供以后比较并记录执行的总时间;第三,它执行等效的位移,存储该值以供以后比较,并记录执行时间;第四,它比较Round和Bit-shift值以找出任何差异.它应该报告没有异常.
请注意,这应适用于所有正,非零值.如果代码遇到分母的零,它将会引发错误,并且我很确定负值不会正确地进行位移,尽管我没有测试过.
var arr1 = [],
arr2 = [],
arrFloorValues = [],
arrShiftValues = [],
intFloorTime = 0,
intShiftTime = 0,
mathround = Math.round, // @trinithis's excellent suggestion
i;
// Step one: create random values to compare
for (i = 0; i < 100000; i++) {
arr1.push(Math.round(Math.random() * 1000) + 1);
arr2.push(Math.round(Math.random() * 1000) + 1);
}
// Step two: test speed of Math.round()
var intStartTime = new Date().getTime();
for (i = 0; i < arr1.length; i++) {
arrFloorValues.push(mathround(arr1[i] / arr2[i]) * arr2[i]);
}
console.log("Math.floor(): " + (new Date().getTime() - intStartTime));
// Step three: test speed of bit shift
var intStartTime = new Date().getTime();
for (i = 0; i < arr1.length; i++) {
arrShiftValues.push( ( ( ( (arr1[i] / arr2[i]) + 0.5) << 1 ) >> 1 ) * arr2[i]);
}
console.log("Shifting: " + (new Date().getTime() - intStartTime));
// Step four: confirm that Math.round() and bit-shift produce same values
intMaxAsserts = 100;
for (i = 0; i < arr1.length; i++) {
if (arrShiftValues[i] !== arrFloorValues[i]) {
console.log("failed on",arr1[i],arr2[i],arrFloorValues[i],arrShiftValues[i])
if (intMaxAsserts-- < 0) break;
}
}
内容总结
以上是互联网集市为您收集整理的Javascript bitshift替代math.round全部内容,希望文章能够帮你解决Javascript bitshift替代math.round所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。