Я боролся с очень простой проблемой ... Я работаю с 4-мерным кубом, используя AVL-деревья ... Теперь проблема связана с производительностью ... В основном мне нужно сравнить миллиарды 64-битных чисел.... (потому что мой ключ 64-битный, состоящий из 4-х измерений по 16 бит каждый) ...
Проблема не в том, что я не могу сравнить 2 64-битных числа, а скорее мне нужно сделать это вкак можно меньше тактов.
К сожалению, мой шаблон дерева AVL имеет подпись "int CompareKeyNode (ключ k, дескриптор h)"
Под капотом у меня есть два числа __int64 lhs & rhsК сожалению, контракт этого метода следующий: 1. lhs == rhs return 0 2. lhs> rhs return 1 3. lhs
Теперь, если вышеуказанный метод ожидал число __int64, я мог бы простосделать ( METHOD A ) возвращаемое lhs - rhs;
К сожалению, для этого нужно только 32-битное целое число, поэтому я должен прибегнуть к чему-то похожему на ((* METHOD B )) т.е.вернуть lhs == rhs?0: (lhs
Проблема для меня заключается в том, что загрузка моих данных с использованием ( METHOD A ) занимает 60 с, а ( МЕТОД B ) занимает 117 секунд.
К сожалению (МЕТОД A) неверен, так как теряет точность при возврате для приведения оператора lhs-rhs.
Время обработки имеет решающее значение для меня, и я уверен, что должен быть простой эффективный ответ, который ускользает от меня прямо сейчас ...
У кого-нибудь есть идеи, как решить эту проблему?Или, может быть, какие-либо предложения?
Я работаю в VC ++ (неуправляемый), но, безусловно, .NET / Java, должно быть, решил эту проблему на этапе JITing / VM ... в противном случае они потерпели бы огромный удар по производительности.
PS: попробовал memcmp (), но недостаточно хорошо ...