Непонятен механизм работы кода

Tigran

Новичок
Пользователь
Авг 19, 2022
4
0
1
Добрый день. Вот вроде бы простой участок кода:
Python:
x=0.1
while True:
    x+=0.1
    if  x==0.2:
        print(x)
        break
Выводит 0.2, но если запросить выводить 0.3 точно таким же образом:
Python:
x=0.1
while True:
    x+=0.1
    if  x==0.3:
        print(x)
        break
Ничего не выходит, и программа не останавливается. Аналогично с каким-то числами работает (от 0.4 до 0,7), а с какими-то нет (от 0.8 до 1.1). Почему может быть такая проблема?
1660925246201.png
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
нужно опробовать код
Код:
x=0.1
x+=0.1
print(x)
и может что-то прояснится)
 

Tigran

Новичок
Пользователь
Авг 19, 2022
4
0
1
нужно опробовать код
Код:
x=0.1
x+=0.1
print(x)
и может что-то прояснится)
Спасибо за наводку, получил решения вроде 1.2000000002 или 0.7999999. Можно решить с помощью round(), но как это вообще понимать?)
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
означает, что добавляет единицу, а не 0,1 как Вы вероятно думаете
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
x+=0.1
то же самое, что х = х+1, отсюда и пляшите
 

Tigran

Новичок
Пользователь
Авг 19, 2022
4
0
1
x+=0.1
то же самое, что х = х+1, отсюда и пляшите
А с чего Вы это взяли?..
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
может Вы начнёте не сомневаться, а действовать?
 

Tigran

Новичок
Пользователь
Авг 19, 2022
4
0
1
может Вы начнёте не сомневаться, а действовать?
Да я вроде как действую, и проблему решил уже. Но что прибавляется 1 вместо 0.1 - это ведь абсурд.
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
се ля ви
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
означает, что добавляет единицу, а не 0,1 как Вы вероятно думаете
зачем вы вводите людей в заблуждение?

добавляется столько, сколько будет написано после оператора +=
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Ничего не выходит, и программа не останавливается. Аналогично с каким-то числами работает (от 0.4 до 0,7), а с какими-то нет (от 0.8 до 1.1). Почему может быть такая проблема?
так как числа с плавающей точкой не равны точно 0.3 или 0.4, это небольшая проблема си реализации питона
я вам предоставлю скрин дебага вашего кода на своем компе
itfy.jpg
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
зачем вы вводите людей в заблуждение?

добавляется столько, сколько будет написано после оператора +=
да, вынужден извинится перед ТС, так и есть, глаза тогда когда писал ответ замылились))
 

Форум IT Специалистов