Vb6 “价值”的意义是什么;6.3706638261923E-314“;在VB中?

Vb6 “价值”的意义是什么;6.3706638261923E-314“;在VB中?,vb6,Vb6,我一直在查看vb代码中对特定值的引用,不知道是否有人对其重要性有任何线索 var_ret_1=Int((6.370661382613E-314/32)) 及 loc_0046BBAE:Var_Ret_2=CDbl(6.3706638261923E-314-6.3706638261923E-314)) loc_0046BBC4:fcomp real8 ptr var_5C loc_0046BBE3:错误提升 loc_0046BBE9: loc_0046BBF5:如果单词ptr[ecx]

我一直在查看vb代码中对特定值的引用,不知道是否有人对其重要性有任何线索

var_ret_1=Int((6.370661382613E-314/32))

loc_0046BBAE:Var_Ret_2=CDbl(6.3706638261923E-314-6.3706638261923E-314))
loc_0046BBC4:fcomp real8 ptr var_5C
loc_0046BBE3:错误提升
loc_0046BBE9:
loc_0046BBF5:如果单词ptr[ecx]<0,则转到loc_0046BBFD
loc_0046BBF7:错误提升
loc_0046BBFD:
loc_0046BC00:shl eax,04h
loc_0046BC03:edi+edi*4=edi+edi*4-单词ptr变量28
loc_0046BC0E:shl eax,04h
loc_0046BC11:esi+esi*4=esi+esi*4-字ptr[ecx]
loc_0046BC38:Var_Ret_3=CDbl(6.3706638261923E-314-6.3706638261923E-314))
loc_0046BC4E:fcomp real8 ptr var_68
loc_0046BC6F:edi=字ptr[eax]-1```

位于最小(最接近零)64位浮点数附近。也许当你从它自身中减去它时,它会产生一个错误(指数溢出),将Var_Ret_2和Var_Ret_3归零,或者不会将这些变量归零


这似乎是有问题的代码。

我在您的VB示例代码中看到了神奇的数字。你指的是什么来源?这个例子来自哪里?VBA中的错误处理依赖于操作系统对异常的支持(SEH)。它使用一个奇怪的异常代码0xC0000090(也称为“浮点无效操作”)。很难猜测他们为什么喜欢这个,但它确实有容易触发的优点。@HansPassant你怎么知道这些事情:)关于非规范浮点操作数的数学,你发布的源代码不是普通的VB6。它是从已编译的EXE反编译的。它是汇编语言(例如
shleacx,04h
)和VB6(例如
CDbl
)的混合体。它不会编译为VB6,也不会编译为汇编程序。反编译器可能对源代码做了一些奇怪的事情。你说你在网上找到了密码,它到底在哪里?
loc_0046BBAE: Var_Ret_2 = CDbl((6.37066138261923E-314 - 6.37066138261923E-314))
loc_0046BBC4: fcomp real8 ptr var_5C
loc_0046BBE3: Err.Raise
loc_0046BBE9:
loc_0046BBF5: If word ptr [ecx] < 0 Then GoTo loc_0046BBFD
loc_0046BBF7: Err.Raise
loc_0046BBFD:
loc_0046BC00: shl eax, 04h
loc_0046BC03: edi+edi*4 = edi+edi*4 - word ptr var_28
loc_0046BC0E: shl eax, 04h
loc_0046BC11: esi+esi*4 = esi+esi*4 - word ptr [ecx]
loc_0046BC38: Var_Ret_3 = CDbl((6.37066138261923E-314 - 6.37066138261923E-314))
loc_0046BC4E: fcomp real8 ptr var_68
loc_0046BC6F: edi = word ptr [eax] - 1```