Math 数据对齐的二次幂倍数

Math 数据对齐的二次幂倍数,math,alignment,Math,Alignment,TinyPE的程序集源代码中包含一个简单的数据对齐数学公式,地址如下: 这是公式: %define round(n, r) (((n+(r-1))/r)*r) 我知道它的主要目的是让n=31这样的数字与r=8时的round(n,r)==32这样的数字对齐 我知道n代表预期的数字,r是四舍五入的“基数”倍数。我还知道,由于它是简单的汇编源代码,所有操作都只返回整数,因此任何小数都很容易丢失,因此不会导致任何计算“错误” 问题是以下解释是否准确,或者是否有更好、更正确的解释。我不想盲目地使用一个

TinyPE的程序集源代码中包含一个简单的数据对齐数学公式,地址如下:

这是公式:

%define round(n, r) (((n+(r-1))/r)*r)
我知道它的主要目的是让n=31这样的数字与r=8时的round(n,r)==32这样的数字对齐

我知道n代表预期的数字,r是四舍五入的“基数”倍数。我还知道,由于它是简单的汇编源代码,所有操作都只返回整数,因此任何小数都很容易丢失,因此不会导致任何计算“错误”

问题是以下解释是否准确,或者是否有更好、更正确的解释。我不想盲目地使用一个我可能会被误解的片段

另外,我希望使用number+(round%(number%round)),但当“number”是“round”的精确倍数时,它会导致被零除


此公式得到一个数的最近倍数,该数为二的幂:

在本例中,我们的数字是31,我们希望作为“基本”倍数的数字是8。它返回32:

(((31+(8-1))/8)*8)
首先我们得到8-1,也就是7。我们把它和31相加,得到38

然后我们除以38/8,得到4.75。由此,整数值为4

4乘以8,得到32

每个公式部分的逻辑/数学意图如下:

--8-1部分使多余部分存在,无论原始数字(在本例中为31)是否为基本舍入数(在本例中为8)的倍数,并且给出的范围为7个非倍数数字和一个可能的倍数。-1的原因是,我们不会通过右移到下一个非最近的倍数而得到错误的计算,但它只是提供了一个不精确的裕度来检测之前的其余“因子”

--通过将这个超出的数字除以基数倍数(本例中为8),在整数部分,我们只得到前面的因子。我们加上的多余部分使数字与最近的倍数对齐,如果它在立即范围内,而前面没有增加到两个倍数(因此为-1)


--通过将该因子的纯整数部分(本例中为4)乘以基倍数r(本例中为8),我们可以得到精确的最近倍数,而无需进行下一次运算。例如,从31开始,最接近8的倍数是32,而不是40。

我不太确定我是否理解你的问题,但是如果你想找到最接近给定数字x的n的幂,你可以试试


n^(四舍五入(ln(x)/ln(n))

请具体点!!!:)