отрицать плавающее число в с не удается в некоторых случаях
Я написал функцию, которая работает в сотнях случаев, но в некоторых случаях не работает.
Вот функция C:
unsigned negate_number(unsigned x) {
int sign = (!(x & 0x80000000))<<31;
int other = 0x7FFFFFFF & x;
return (sign | other);
}
Я просто маскирую знак, переворачиваю его и делаю ИЛИ (соединение) с замаскированным показателем степени и Мантессой. Так что это должно работать во всех случаях.
Но вот случай, когда он терпит неудачу: x = 0x7fc00000 (2143289344)