Какой хороший способ сортировать книгу заказов по цене, когда цены плавают / удваиваются? Двоичное дерево работает нормально, когда цены целые, потому что вы можете отключить цену и получить O (log (n)) add. Это плохая идея или, по крайней мере, рискованно отключать поплавки / удвоения.
Прежде всего, я бы предложил хранить цены в виде целых чисел. Просто сделайте блок cents
, pence
, öre
или какая-либо меньшая единица в вашей стране — или даже 1/1000-я или 1/10000-я основная валюта. Это сэкономит много головной боли позже.
Но пока вы не делаете if (x.price == y.price)
, это прекрасно в использовании price
в качестве ключа. Для сортировки двоичное дерево нуждается только в less than
(или же greater than
) сравнение, которое должно быть абсолютно безопасным для значений с плавающей запятой. Значение всегда меньше или больше некоторого другого значения. Только когда вы делаете расчеты и пытаетесь определить, точно ли значение равно, вы получаете проблемы с плавающей запятой. [Или когда вы ожидаете точный результат от вычислений, таких как умножение на 2,46, затем деление на 2,46, а затем вычитание исходного числа и ожидание ровно нуля]
Других решений пока нет …