Как правило, если вы используете '%.14f' % lat
, вы LOSING PRECISION .
Чтобы получить полную точность из числа с плавающей запятой, используйте repr()
.
Пример:
>>> lat = 1/3.
>>> lat
0.3333333333333333
>>> str(lat).count('3')
12
>>> ('%.14f' % lat).count('3')
14
>>> repr(lat).count('3')
16
>>>
Кстати, вы используете старый Python.
>>> 0.33245794180134 == 0.33245794180133997
True
>>>
Питоны до 2.7 производят repr(a_float)
, используя 17 значащих десятичных цифр, потому что это гарантирует, что float(repr(a_float)) == a_float
.Новый метод заключается в использовании наименьшего числа цифр, что обеспечит такую же гарантию.Перейдите по этой ссылке и нажмите Ctrl-F для поиска repr()
.
Если вы получаете эти числа из внешнего источника, то вы можете потерять точность, разместив их и затем сериализовав их14 десятичных цифр точности.
Если вы получаете эти числа вычислением, то вы можете потерять точность, сериализовав их с 14 десятичными цифрами точности.
Резюме: В целом, если вы используете'% .14f'% lat, ВЫ теряют точность - не Python, не арифметика с плавающей точкой, это вы ..