gpt4 book ai didi

javascript - 将任何十进制数字向上取整的最快方法

转载 作者:行者123 更新时间:2023-12-03 10:47:28 25 4
gpt4 key购买 nike

我有两个变量:

var elems;
var limit;

两者都可以是任意随机整数。

想象一下 elems = 5 和 limit = 3,并且 elems/limit 给了我们一组盒子。

如果elems是limit的倍数,那么我们只会得到“完整的盒子”,否则,if limit < elems我们将额外获得一个“不完整的盒子”。 If limit > elems ,那么我们当然只得到“一整盒”。

例如(5/3):

total elems: 5
limit: 3
offset: 0 3
box number: [0] [1]
elems contained: 3 2

offset = box number * limit

在此示例中,框偏移 3 是“不完整框”,框偏移 0 是完整框。

我想找到最大偏移量,无论是给定任意数量的元素还是任意数量的限制。以最简单的形式来说,问题是找到最快的方法来将任何位置有任何小数的任何数字向上取整以适应查找最大偏移量的方式问题

到目前为止,我已经提出了以下解决方案:

maxOffset = ((elems / limit - 1 | 0) + Math.ceil((elems % limit) / limit)) * limit; 

maxOffset = Math.abs(Math.ceil((elems / limit) - 1) * limit);

maxOffset = (elems === limit) ? 0 : (1 === limit) ? (elems - 1) : (elems / limit >> 0) * limit;

但是,我正在寻找更优雅的解决方案。我在想也许:

maxOffset = ((elems / limit) - 1E-16 | 0) * limit; 

但我不确定巨大的数字到底会发生什么(我假设它会失败?),并且如果 1E-16 实际上是任何 float 可以拥有的最小十进制数。

这根本不是作业,我只是一个业余程序员,我正在尝试为我正在编写的 CMS 解决这个问题。我希望我说得清楚,谢谢。

最佳答案

看看你的例子,你想要

maxOffset = limit * Math.floor((elems - 1) / limit);

因为这是任何框的第一个元素的最大索引。 Fo 对于 limit = 3,您会在 {0, 1, 2} 中得到 elemsmaxOffset == 0maxOffset == 1 表示 {3, 4, 5} 中的 elems,依此类推。如果你的整数是非负数,我可能会写成

maxOffset = limit * (((elems - 1) / limit) | 0);

值得学习的教训:不要从分数中减去一些浮点偏移量,而是从分子中减去整数偏移量,这样您就可以完全停留在整数运算中,JS 引擎可以利用它来提高性能。

关于javascript - 将任何十进制数字向上取整的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com