основная структура данных для float в python

Возник вопрос относительно базовой структуры данных 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. почему мы не можем просто сохранить фактическое число вместо сохранения ближайшего числа? это ограничение или торговля ради эффективности?

большое спасибо Джон

6
задан John 18 July 2011 в 23:00
поделиться