Самый быстрый способ найти абсолютное значение двойного числаPython

Программы на Python
Ответить
Anonymous
 Самый быстрый способ найти абсолютное значение двойного числа

Сообщение Anonymous »

Работая над программой решения конечных элементов ради развлечения, я столкнулся с математической задачей, когда площадь треугольника приходилось решать несколько раз для разных треугольных элементов сетки.
Примечание: все это делается в Cython:
Для двумерного случая формула определителя позволяет нам сделать это с помощью наименьшего количества арифметических операций.

Код: Выделить всё

A = 0.5|[x_1(y_2-y_3) + x_2(y_3-y_1) + x_3(y_1-y_2)]|
Однако это будет вызываться один раз для каждого элемента, а в случае адаптивной сетки — и для каждой итерации. Поэтому найти абсолютное значение становится проблемой. Использование функции, которая выполняет сравнения и ветвление if-else, кажется неправильным. Поэтому я подумал, что битовая манипуляция может быть решением, и выбрал этот подход.

Код: Выделить всё

from libc.stdint cimport uint64_t

cdef union DoubleIntUnion:
double double_nr
uint64_t int_nr

cdef double fastABS(double number) nogil:
cdef DoubleIntUnion u_number
u_number.double_nr = number
u_number.int_nr &= 0x7FFFFFFFFFFFFFFF
return u_number.double_nr
это работает. Но есть ли способ сделать это лучше в этом случае или какие-либо предложения?

Подробнее здесь: https://stackoverflow.com/questions/789 ... f-a-double
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»