Возможно, вам понадобится привести в длинное русло, а затем выполнить двойное дополнение и отыграть обратно:
double x = 1245.1;
long l = (long)x;
l=~l; l++; /* complement followed by + 1 */
x = (double)l;
Я не проверял это, но, надеюсь, он выведет вас на правильный путь.
Редактировать: Поскольку вы не можете приводить от двойного к длинному с битовым представлением, вам может потребоваться сделать что-то вроде:
double x = 1234.5;
ulong l;
unsigned char * d = (unsigned char *) &x;
l = (ulong)(*d);
l=~l; l++;
d = (unsigned char *) &l;
x = (double)(*d);
Снова непроверенный ...