@aab137

Переписал код на Бэйсик с питона, почему работает неверно?

Есть код на питоне
def f(x):
    return (100-2*x)*(75-2*x)*x


eps = 0.00001

l = 0
r = 75/2

while r-l > eps:
    m = (r+l)/2
    if (f(l)-f(l+eps)) * (f(m)-f(m+eps)) > 0:
        l = m
    else:
        r = m
print((r+l)/2)

Выдает примерно 14.14, это верно
Переписал на Бэйсик
Function f(ByVal x As Single) As Single
    f = (100 - x * 2) * (75 - x * 2) * x
End Function
Sub program()
    Dim l As Single, m As Single, eps As Single, r As Single
    eps = 0.00001
    l = 0
    r = 75 / 2
    Do While r - l > eps
    m = (r + l) / 2
    If (f(l) - f(l + eps)) * (f(m) - f(m + eps)) > 0 Then
        l = m
    Else
        r = m
    End If
    Loop
    Cells(1, 1).Value = (r + l) / 2
End Sub

Выдает 13,47569942, что неверно. Что я не так переписал?
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
Dremuk
@Dremuk
Может вместо single поставить double?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы