gpt4 book ai didi

excel - excel(vba)中的日志功能 - 没有给我正确的答案

转载 作者:行者123 更新时间:2023-12-04 22:22:42 26 4
gpt4 key购买 nike

在下面的代码片段中, temp_int2 的值为 1,对我来说毫无意义。 --> log(1000) = 3,即以10为底的对数,对数函数以'e'为底。

我不确定它的“INT”功能是否有问题,但有人可以帮忙。

enter image description here

temp_int2 = Int(Log(1000) / Log(10)) - 1
'temp_int2 = Int(Log(cap_dec) / Log(10)) - 1

MsgBox ("Value of log functuon -->" & CStr(Log(cap_dec) / Log(10)) & " value after log function " & CStr(temp_int2))

最佳答案

而不是 Int function使用 cLng function .而Int将截断小数,cLng将四舍五入为 Long .

示例 Int会切断

Int(99.2) '= 99
Int(99.5) '= 99
Int(99.8) '= 99

但是 cLng将圆
cLng(99.2) '= 99
cLng(99.5) '= 100
cLng(99.8) '= 100

由于计算机和计算器计算的是数字而不是代数,因此计算中可能存在精度问题, Log(1000) / Log(10)不完全是代数 3而是一个数字 3类似于 2.99999999999998其中 Int将切断到 2但是 cLng将四舍五入到 3 .

请注意,Excel 是一个数值计算程序,类型为 Double。不是精确值。小数(与任何标准计算器一样)仅计算到定义的精度。
所以一个 Double类型 3不是 3但非常接近 3喜欢 2.99999999999998 .所以 Log function返回 Double还有一个部门 Log(1000) / Log(10)返回 Double这不完全是 3但非常接近 3 .

请注意,这不是错误,而是数值计算的本质,它从不精确,而只是精确,而代数计算可以是精确的。

比较 Double 类型的值时会出现同样的问题。 :
If DoubleA = DoubleB Then 'might not work

在这里你需要使用类似的东西
If (DoubleA - DoubleB) ^ 2 < (10^ - Digits)^2

在哪里 Digits是需要相同的位数。例子
DoubleA = 0.9999999999
DoubleB = 1.0000000001

然后 Digits需要 <= 9认为他们是平等的。

如果您需要经常这样做,那么使用一个函数会很方便:
Option Explicit

Public Function IsDoubleValueTheSame(DoubleA As Double, DoubleB As Double, Optional Digits As Long = 12) As Boolean
IsDoubleValueTheSame = (DoubleA - DoubleB) ^ 2 < (10 ^ -Digits) ^ 2
End Function

并称它为
Debug.Print IsDoubleValueTheSame(0.9999999999, 1.0000000001, 9)  'true
Debug.Print IsDoubleValueTheSame(0.9999999999, 1.0000000001, 10) 'false

所以回到你最初的例子:
Debug.Print Log(1000) / Log(10) = 3 'false
Debug.Print IsDoubleValueTheSame(Log(1000) / Log(10), 3, 15) 'true
Debug.Print IsDoubleValueTheSame(Log(1000) / Log(10), 3, 16) 'false

这意味着 Log(1000) / Log(10)实际上是 3精确到 15数字和 16ᵗʰ 数字不同。

关于此的更多信息:
  • Numeric precision in Microsoft_Excel (维基百科)
  • Floating-point arithmetic may give inaccurate results in Excel (微软文档)
  • Compare double in VBA precision problem (堆栈溢出)
  • 关于excel - excel(vba)中的日志功能 - 没有给我正确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61048508/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com