Возник вопрос относительно базовой структуры данных float (и точности) в Python:
>>> b = 1.4 + 2.3
>>> b
3.6999999999999997
>>> c = 3.7
>>> c
3.7000000000000002
>>> print b, c
3.7 3.7
>>> b == c
False
кажется, что значения b и c зависят от машины, это числа, наиболее близкие к целевому. значения, но не совсем те же числа. Я следил за тем, чтобы мы получали «правильные» числа с помощью «Печать», и кто-то сказал мне, что это произошло потому, что print «лжет», в то время как Python решил сказать нам правду, т.е. показать именно то, что они сохранили.
И мои вопросы:
1. Как врать? например в функции мы берем два значения и возвращаем, если они совпадают, как я могу лучше всего догадаться, если число десятичных знаков (точность) неизвестно? как b и c, упомянутые выше? есть ли для этого четко определенный алгоритм? Мне сказали, что каждый язык (C / C ++) будет иметь такого рода проблемы, если мы будем использовать вычисления с плавающей запятой, но как они «решают» это?
2. почему мы не можем просто сохранить фактическое число вместо сохранения ближайшего числа? это ограничение или торговля ради эффективности?
большое спасибо Джон