gpt4 book ai didi

vb.net - 这里发生了什么?!?对于 d As Double = 0 To 1 步骤 0.01 不精确?

转载 作者:行者123 更新时间:2023-12-02 06:43:21 24 4
gpt4 key购买 nike

我只是测试我为在项目中使用而制作的量化器类,并模拟相对细粒度的数字范围(以便该类量化为离散步骤),我使用 For...Next 循环a Double 作为递增值。就像这样:

For d As Double = 0 To 1 Step 0.01
' logic here
Next

结果并不是我对量化器的预期,我挠了挠头,试图找出我的量化逻辑哪里出了问题。最后,我只是简单地转储了循环产生的数字,几乎就是为了它。令我惊讶的是,上面的循环并没有以 0.01 的精确步长产生一系列数字..!

这是我使用的循环:

For d As Double = 0 To 1 Step 0.01
Me.TextBox1.AppendText(d.ToString & vbCrLf)
Next

这是它打印的数字列表:

0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
0.11
0.12
0.13
0.14
0.15
0.16
0.17
0.18
0.19
0.2
0.21
0.22
0.23
0.24
0.25
0.26
0.27
0.28
0.29
0.3
0.31
0.32
0.33
0.34
0.35
0.36
0.37
0.38
0.39
0.4
0.41
0.42
0.43
0.44
0.45
0.46
0.47
0.48
0.49
0.5
0.51
0.52
0.53
0.54
0.55
0.56
0.57
0.58
0.59
0.6
0.61
0.62
0.63
0.64
0.65
0.66
0.67
0.68
0.69
0.7
0.71
0.72
0.73
0.74
0.75
0.76
0.77
0.78
0.79
0.8
0.810000000000001
0.820000000000001
0.830000000000001
0.840000000000001
0.850000000000001
0.860000000000001
0.870000000000001
0.880000000000001
0.890000000000001
0.900000000000001
0.910000000000001
0.920000000000001
0.930000000000001
0.940000000000001
0.950000000000001
0.960000000000001
0.970000000000001
0.980000000000001
0.990000000000001

显然,直到 0.8,这都是我所期望的,但在那之后......发生了什么事?将循环的上限从 1 增加到 3(例如),将会以一定的间隔显示类似的不精确数字带。我是否必须将循环重写为这样的内容?

Dim d As Double
For i As Integer = 0 To 100
d = i / 100
' logic here
Next

最佳答案

float (如 double )是近似值。系统使用的 0.8 近似值加上系统使用的 0.01 近似值更接近 0.810000000000001,而不是 0.81。如果您希望它是准确的,就像您自己建议的那样,请使用整数

For i As Int = 0 To 100
Dim d as Double = i/100.0
' logic here
Next

关于vb.net - 这里发生了什么?!?对于 d As Double = 0 To 1 步骤 0.01 不精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445874/

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