Хитрый предмет. Прямой способ изменить знак числа с плавающей запятой состоит в том, чтобы перевернуть значение старшего значащего бита переменной. Обозначения, перечисленные в других ответах, зависят от компилятора, что обычно хорошо, но не всегда. Для «float x» ответ:
*(unsigned int*)&x ^= (1<<31)
Если вы пишете для чего-то вроде iPhone, который имеет процессор Cortex A8 (или что-то подобное), вы хотите избежать двойных значений, а также избежать условных выражений при работе с плавающими во внутренних циклах. Итак, вы можете сделать это:
*(unsigned int*)&x ^= ( (x<0) << 31 );
Что превратит негативы в позитивы без использования инструкции ветвления. Если это происходит во внутреннем цикле, это будет в 5-20 раз быстрее, чем при использовании другого метода на iPhone. Если это не во внутреннем цикле, то вам, вероятно, это безразлично!