Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找数字的范围_Algorithm_Range - Fatal编程技术网

Algorithm 查找数字的范围

Algorithm 查找数字的范围,algorithm,range,Algorithm,Range,我正在研究一个小算法,实际上是一个数学函数,在这个函数中,我必须找到一个数字,同时将另一个数字加倍 例如,我必须找到206的范围,而从8开始并将其加倍,即 8 + 8 -> 16 + 8 -> 24 + 8 -> 32 ... 在某些情况下,必须找到206之前最接近的数字,然后在该值上再加上8 有什么统计或数学公式我可以直接使用吗?是的,它叫整数除法 result_lo = floor(206 / 8) * 8 result_hi = (floor(206 / 8) + 1)

我正在研究一个小算法,实际上是一个数学函数,在这个函数中,我必须找到一个数字,同时将另一个数字加倍

例如,我必须找到206的范围,而从8开始并将其加倍,即

8 + 8 -> 16 + 8 -> 24 + 8 -> 32 ...
在某些情况下,必须找到206之前最接近的数字,然后在该值上再加上8


有什么统计或数学公式我可以直接使用吗?

是的,它叫整数除法

result_lo = floor(206 / 8) * 8
result_hi = (floor(206 / 8) + 1) * 8

是的,它叫整数除法

result_lo = floor(206 / 8) * 8
result_hi = (floor(206 / 8) + 1) * 8

既然你们在理解地板上有困难,让我简单地向你们描述一下

floor(x) = the greatest integer less than or equal to x
所以

为什么楼层(N/8)*8工作

我们希望8的最大倍数小于或等于N

所以我们希望尽可能多地删除8,直到它大于0

206-8-8-8-8-…8=6

除此之外,如果我们减去8,它会低于0,所以我们停在这里

一个重要的观察结果是除法就是简单的重复减法

这意味着除以206/8可以得到从206中减去的8的数量

当输入数限于正数时,可以简单地使用C++中的整数除法。这是因为,当你在C++中执行整数除法时,结果被截断。 即8/3将被设置为2

虽然8/3是2.66,结果只是整数部分。小数部分被忽略。(这只是一个简单的解释,对于负整数,您需要遵循)

在C++中,你可以简单地写:

((N)/8)*8

请不要因为它有效就使用它,试着找出它有效的原因

由于您在理解地板方面有困难,让我简单地向您描述一下

floor(x) = the greatest integer less than or equal to x
所以

为什么楼层(N/8)*8工作

我们希望8的最大倍数小于或等于N

所以我们希望尽可能多地删除8,直到它大于0

206-8-8-8-8-…8=6

除此之外,如果我们减去8,它会低于0,所以我们停在这里

一个重要的观察结果是除法就是简单的重复减法

这意味着除以206/8可以得到从206中减去的8的数量

当输入数限于正数时,可以简单地使用C++中的整数除法。这是因为,当你在C++中执行整数除法时,结果被截断。 即8/3将被设置为2

虽然8/3是2.66,结果只是整数部分。小数部分被忽略。(这只是一个简单的解释,对于负整数,您需要遵循)

在C++中,你可以简单地写:

((N)/8)*8


请不要因为它有效就使用它,试着找出它有效的原因

冒着听起来幼稚的风险。。您要的是
[楼层(206/8)*8,天花板(206/8)*8]
@loannis我想是的,如果您仔细看,我刚才回答了。@H2CO3抱歉,我没有刷新页面-现场@洛恩尼斯,没有得到那些分数(@FarrukhWaheed在这里看一看:如果你使用Excel,
floor(x)=RoundDown(x,0)
ceil(x)=RoundUp(x,0)
。另请参见下面H2CO3的答案。基本上是向上或向下取整,再乘以你除以的数字,你就创建了你所要求的范围。听起来很幼稚。你是在要求
[floor(206/8)吗*8,ceil(206/8)*8]
@loannis我想是的,如果你仔细看的话,我刚才回答了这个问题。@H2CO3对不起,我没有及时刷新页面!@loannis,没有得到这些要点。(@FarrukhWaheed在这里看一看:如果你使用Excel,
floor(x)=RoundDown(x,0)
ceil(x)=RoundUp(x,0)
。另请参见下面H2CO3的答案。基本上是向上或向下取整,再乘以你所除以的数字,你就可以创建你所要求的范围。太好了。谢谢@H2CO3…这似乎给出了结果。@FarrukhWaheed:你知道它为什么会给出结果吗?嗯,我也很想知道。但只要看看它的内部sid就知道了这是一个可怕的数学。例如,@FarrukhWaheed截断简单除法结果的小数部分有什么可怕的?我不知道你到底有什么困难。@FarrukhWaheed除非你不知道除法是什么,否则你不应该为此而挣扎。(如果你不擅长数学,还可以学一些数学,程序员需要大量的高等数学!)太好了……谢谢@H2CO3……这似乎有结果了。@FarrukhWaheed:你知道它为什么会有结果吗?嗯,我也很有兴趣知道。但只要看看它的内部和那里的数学就知道了。也就是说@FarrukhWaheed截断简单除法结果的小数部分有什么可怕的?我不知道“我不能确切地理解你遇到的困难。@FarrukhWaheed除非你不知道除法是什么,否则你不应该在这方面苦苦挣扎。(如果你不擅长数学,学习一些数学,程序员需要大量的高等数学!)@Farrukh Waheed,在Aravind的最后一句话的基础上:如果你不明白它为什么有效,你就无法知道它是否真的有效。它只是在你测试它的情况下做你想做的事情,仅此而已。感谢Aravind提供的如此详细的信息…我以后一定会处理这个问题,因为我现在正在忙于其他任务…非常感谢。@Farrukh Wa注意,在Aravind的最后一句话的基础上:如果你不明白它为什么有效,你就无法知道它是否真的有效。它只是在你测试它的情况下做你想做的事情,仅此而已。感谢Aravind提供的如此详细的信息…稍后一定会解决这个问题,因为我现在正在忙于其他任务…非常感谢。