【发布时间】:2021-03-04 17:12:22
【问题描述】:
我必须生成一个彼此等距的数字序列。我有下限、上限和从一个到另一个的步骤。为此,我编写了一个 Do-Loop 子句。如果我尝试使用很少的数字作为输出(提供的代码中的 y 大小写)来执行此操作,它可以正常工作,但是当数字更多(下面代码中的 z 大小写)时,我的软件会冻结。这是我在 VS2019 中提供的代码:
Dim y As Double = DataGridView2.Rows(0).Cells(2).Value
Dim z As Double = DataGridView2.Rows(0).Cells(4).Value
Do
ListBox8.Items.Add(y)
y += CDbl(Form1.TextBox2.Text)
Loop Until y = DataGridView2.Rows(0).Cells(3).Value
ListBox8.Items.Add(y)
Do
ListBox9.Items.Add(z)
z += CDbl(Form1.TextBox2.Text)
Loop Until z = DataGridView2.Rows(0).Cells(5).Value
ListBox9.Items.Add(z)
对于我试图使其工作的情况,y-case 有 4 个数字作为输出,而 z-case 应该提供 61 个数字作为输出。我该如何解决这个问题? 谢谢大家会回答我。
最好的问候
【问题讨论】:
-
您正在使用双精度数,因此由于精度和舍入误差,
z = DataGridView2.Rows(0).Cells(5).Value可能永远不会为真。举例说明 DataGridView 中的下限/上限、步骤和值。 -
@Idle_Mind 在这种情况下,下限为 0,上限为 3,步长为 0.05。但它可能会有所不同,并且上限的数量也可能要高得多。我也尝试了一个没有变化的单精度数字
-
每位计算机科学家都应该了解的浮点运算知识:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
-
Bruce Dawson 收集的浮点数学文章:randomascii.wordpress.com/category/floating-point/page/3