negacja liczby ruchomej w c nie udaje się w niektórych przypadkach
Napisałem funkcję, która działa w setkach przypadków, ale w niektórych przypadkach kończy się niepowodzeniem.
Oto funkcja C:
unsigned negate_number(unsigned x) {
int sign = (!(x & 0x80000000))<<31;
int other = 0x7FFFFFFF & x;
return (sign | other);
}
Po prostu maskuję znak, odwracam go i wykonuję OR (łączenie) z maskowanym wykładnikiem i mantessą. To powinno działać we wszystkich przypadkach.
Ale tutaj jest przypadek, w którym nie powiedzie się: x = 0x7fc00000 (2143289344)