В последнее время вы можете использовать функцию intern, чтобы убедиться, что вы получаете ссылку на одну и ту же строку:
>>> a = intern('a')
>>> a2 = intern('a')
>>> a is a2
True
Как указано выше, вы, вероятно, не должны делать является определение равенства по строкам. Но это может быть полезно узнать, есть ли у вас какое-то странное требование использовать is
.
Обратите внимание, что функция-интернатура перешла из встроенной функции в модуль sys
для Python 3.
Для "более точного": этот рецепт в Поваренной книге Python имеет алгоритмы суммирования, которые сохраняют полную точность (путем отслеживания промежуточные итоги). Код находится в Python, но даже если Вы не знаете Python, который это достаточно ясно адаптировать к любому другому языку.
Все подробности даны в данная статья .
См. также: алгоритм суммирования Kahan Это не требует O (n) устройство хранения данных, но только O (1).
Ну, если Вы не хотите сортировать затем, Вы могли бы просто сохранить общее количество в переменной с типом более высокой точности, чем отдельные значения (например, использовать двойное для хранения суммы плаваний, или "четверка" для хранения суммы удваивается). Это наложит потерю производительности, но это могли бы быть меньше, чем стоимость сортировки.
Если Ваше приложение полагается на числовой поиск обработки библиотеки арифметики произвольной точности, однако я не знаю, существуют ли библиотеки Python этого вида. Конечно, все зависит от того, сколько цифр точности Вы хотите - можно достигнуть хороших результатов со стандартной плавающей точкой IEEE при использовании ее с осторожностью.