出于某种原因,以下语句的计算结果为零。我认为这是由于溢出,但所有中间值似乎都在双精度范围内。
DiffieHellmanKey = (43 ^ 47) - (53 * Fix((43 ^ 47) / 53))
我认为它是溢出的,因为当我用不同的数字(如下)执行它时,它会产生正确的值 29。
DiffieHellmanKey = (5 ^ 22) - (53 * Fix((5 ^ 22) / 53))
是什么赋予了?现在,回到让我溢出的原始数字。所有涉及的变量都是双精度数。如果我将其计算为工作表公式而不是在 VBA 中,它甚至都不起作用:
=(43 ^ 47) - (53 * ROUNDDOWN(((43 ^ 47) / 53), 0))
如果我使用等效形式(如下)在 VBA 中实现上述示例,则会得到 -1.75357E+62 的错误结果。
DiffieHellmanKey = (43 ^ 47) - (53 * WorksheetFunction.RoundDown(((43 ^ 47) / 53), 0))