首页 > 解决方案 > 对浮点进行平方会产生“负零”并使 MDeterm 崩溃

问题描述

输入以下数组时,通过 Excel VBA 调用的 Worksheetfunction.MDeterm(矩阵行列式)崩溃(运行时错误 1004)

Sub test()
    Dim a
    a = Array( _
            Array(0#, 0#), _
            Array(-0#, 0#) _
        )
    MsgBox WorksheetFunction.MDeterm(a)
End Sub

注意:'#'表示Double类型,第二行第一列有一个带符号的零。

为什么我需要-0

我没有,但早些时候(显然,为了简洁起见,我没有在这里包含整个代码)我进行了一个计算,我将一个数字平方并取反。比如-5^2=-25。由于这种平方,数字会自动转换为 Double。使用“^”运算符或 Worksheetfunction.Power 都没关系。无论如何,它必须是一个浮点数。

为什么我不写x*x??x ^ 2

因为 myx是一个很长的表达式,写两次看起来很丑。

值得注意的是,当负零位于矩阵中的其他 3 个位置中的任何一个时,该函数不会崩溃。这是唯一的解决方法吗?:

If a(1,0) = 0 Then ' True if zero or negative zero
    a(1,0) = 0 ' assigns an unsigned zero
End If

标签: vbafloating-pointzero

解决方案


推荐阅读