Я пытаюсь преобразовать большое отрицательное значение внутри класса Cython в переменную типа uint64_t. Но я продолжаю получать эту ошибку:
OverflowError: невозможно преобразовать отрицательное значение в беззнаковое длинное
cdef uint64_t temp2 = <uint64_t>(temp - bitReversal(current_pos))
Число, которое я получаю от temp - bitReversal(current_pos)
, - -1152831344652320768, и если я жестко запрограммировал его, он работает. На данный момент я создаю действительно уродливый хак, преобразующий отрицательное число в соответствующее беззнаковое, но, как и ожидалось, он очень медленный.
<uint64_t>
на(uint64_t)
? (И примите переполнение.) - person user2864740   schedule 19.09.2014(uint64_t)
недопустимый синтаксис для cython - person Alan Höng   schedule 19.09.2014uint64_t
, а затем положитесь на тот факт, что беззнаковые целые числа C имеют гарантированное поведение переполнения. (Выполнение арифметики со знаком и последующее приведение к беззнаковому не гарантировано; оно основывается на том факте, что подписанные числа вашей платформы являются 2s-дополнительными, реализованы очевидным образом, и что ваш компилятор не делает предположений что они не будут переполняться - и эта последняя часть не всегда может быть верной в современных системах, даже если первые две части верны.) - person abarnert   schedule 19.09.2014