Public Sub ComputeMachineEpsilon()
Dim g, ex, eps As Double
Dim i As Long
g = 1
i = 0
Do
i = i + 1
g = g / 2
ex = g * 0.98 + 1
ex = ex - 1
If ex > 0 Then eps = ex
Loop While ex > 0
MsgBox ("No. of Iterations " & i)
MsgBox ("Machine Epsilon is " & eps)
End Sub
4条答案
按热度按时间vlf7wbxs1#
Excel始终对IEEE double进行操作。
一个非正则表达式可以得到大于0的最小非反规格化浮点数,它是
字符串
另一方面,机器计数是可以与1相加并产生大于1的数字的最小数字。对于双精度,它由下式给出:
型
62lalag42#
Microsoft为XL定义了其浮点数精度限制。最小的浮点数在Microsoft support article ID: 78113中被列为2.2250738585072E-308。当我在电子表格中输入这个数字时,它实际上存储了一个浮点0,但如果我存储2.2250738585073E-308,(我在最低有效位上加了1)我可以看到所有的数字。我看到你要求一个机器的浮点数,但由于你使用的是XL,你真正看到的是C/C++浮点库的浮点数。请参阅Microsoft Developer Network xlfRegister (Form 1) topic。
polkgigr3#
你可以写一个类似于这样的子例程:
字符串
但在我的机器上,它给出了2,22 E-16,这很奇怪,因为我可以在一个单元格中写入
=2^-113
,得到9,62965 E-35。编辑:
型
我得到:-2,78E-17
pengsaosao4#
字符串
上面假设x1是2在-48到-47范围内的整数次幂,否则返回
NA()
。在Excel 2021上,这将返回2^-47。根据需要,按照相同的模式扩展嵌套IFs
的数量,以捕获更大或更小的可能x1范围。