繁体   English   中英

使用 Doubles (Excel) 的 VBA 溢出不正确

[英]Incorrect VBA Overflow using Doubles (Excel)

出于某种原因,以下语句的计算结果为零。 我认为这是由于溢出,但所有临时值似乎都在双精度的范围内。

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))
? (43^47) 
 5.92949097309764E+76

? 53*Fix((43^47)/53)
 5.92949097309764E+76 

? (53*Fix((43^47)/53)) = (43^47)
True

你是对的,但你的问题不是溢出,而是有效数字。

Microsoft Excel 中的数字不能超过 15 位有效数字,但小数可以大到 127。

来源: http : //msdn.microsoft.com/en-us/library/office/ff838588.aspx

这是您的原始公式发生的情况:

(43 ^ 47) - (53 * Fix((43 ^ 47) / 53))简化为(43 ^ 47) - fix(43 ^ 47)那么 (43^47) 大约有 76 位长,所以它们都是减少到相同的数量并等于 0。

VBA 中最大的变量类型是“十进制”,它只包含 29 位有效数字。 您将无法在本机使用 Visual Basic 执行这么大的数学运算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM