excel - 使用 double 的 VBA 溢出不正确 (Excel)

标签 excel vba double overflow rsa

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

DiffieHellmanKey = (43 ^ 47) - (53 * Fix((43 ^ 47) / 53))

我认为这是溢出,因为当我用不同的数字(如下)执行它时,它会得到正确的值 29。

DiffieHellmanKey = (5 ^ 22) - (53 * Fix((5 ^ 22) / 53))

什么给了?现在,回到让我溢出的原始数字。所有涉及的变量都是 double 。如果我将其计算为工作表公式而不是 VBA,它甚至不起作用:

=(43 ^ 47) - (53 * ROUNDDOWN(((43 ^ 47) / 53), 0))

如果我使用等效形式(如下)在 VBA 中实现上述示例,我会得到错误的结果 -1.75357E+62。

DiffieHellmanKey = (43 ^ 47) - (53 * WorksheetFunction.RoundDown(((43 ^ 47) / 53), 0))

最佳答案

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

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 本身执行如此大规模的数学运算。

关于excel - 使用 double 的 VBA 溢出不正确 (Excel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12965805/

相关文章:

c# - 如何只获取EXCEL工作表中有值的列

java - 使用 Apache POI 导入 CSV 数据

c# - 从大双值中获取字符串(C#)

excel - 将数据从每隔一行转置到列

vba - 填写特定工作表中多列中的空白单元格

.net - 翻转数字符号的函数

java 小数格式无法正确舍入

excel - 我想比较 Excel 中不同工作表中的两个列表以查找任何重复项

vba - 捕获整个公司的电子表格使用情况

vba - 在过滤器中使用 "Or"