Странная ошибка при использовании встроенной типизации в CUDA

Я не могу понять, в чем разница между следующими частями кода:

int t = __double2int_rd(pos.x/params.cellSize.x*2.0)&1;
if( t ==0) {...}

а также

if(__double2int_rd(pos.x/params.cellSize.x*2.0)&1 == 0) {...}

Второй параметр никогда не возвращает true, тогда как первый ведет себя как ожидалось.

У кого-нибудь есть какие-либо идеи?

3

Решение

Второе выражение сначала оценивает (1==0) чей результат всегда ложен. затем ANDs это с результатом функции __double2int_rd,

Поэтому он на самом деле оценивает:

if(__double2int_rd(pos.x/params.cellSize.x*2.0) & 0)

Который всегда будет ложным.

Эквивалентом первого выражения будет:

if((__double2int_rd(pos.x/params.cellSize.x*2.0) & 1) == 0)

Следите за скобками.
Хорошей практикой программирования является добавление скобок, если вы не уверены в порядке вычисления выражений.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector