在Microsoft Excel中获取机器名称

fykwrbwg  于 2023-11-20  发布在  其他
关注(0)|答案(4)|浏览(128)

这似乎是一个更好地针对那些有一些编程经验,而不仅仅是一般的Excel用户的问题,因此我在这里问,而不是超级用户。
是否有任何方法(最好是通过函数)返回epsilon(即Excel计算中可表示的最小非零数字)?如果无法通过函数检索到epsilon,是否有一种快速的方法可以通过紧凑函数来计算它?
需要说明的是,我不是在寻找一个基于VBA的解决方案,我想一个Excel公式/电子表格为基础的解决方案,不需要运行宏。
我在网上搜索的结果大多是关于如何显示符号Epsilon的讨论。
谢谢.

vlf7wbxs

vlf7wbxs1#

Excel始终对IEEE double进行操作。
一个非正则表达式可以得到大于0的最小非反规格化浮点数,它是

=2^-1022

字符串
另一方面,机器计数是可以与1相加并产生大于1的数字的最小数字。对于双精度,它由下式给出:

=2^-52

62lalag4

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

polkgigr

polkgigr3#

你可以写一个类似于这样的子例程:

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

字符串
但在我的机器上,它给出了2,22 E-16,这很奇怪,因为我可以在一个单元格中写入=2^-113,得到9,62965 E-35。

编辑

=1*(0,5-0,4-0,1)


我得到:-2,78E-17

pengsaosao

pengsaosao4#

=2^if(1+2^-49<>1,NA(),if(1+2^-48<>1,-48,if(1+2^-47<>1,-47,NA())))

字符串
上面假设x1是2在-48到-47范围内的整数次幂,否则返回NA()。在Excel 2021上,这将返回2^-47。根据需要,按照相同的模式扩展嵌套IFs的数量,以捕获更大或更小的可能x1范围。

相关问题