C'è un trucco per scomporli.
L'invenzione probabilmente risalve a San R. W. Stevens, ma l'attribuzione è incerta :-), in ogni caso eccotela:

codice:
#include <stdio.h>

int main ()
{
  union {
    short s;
    char c [ sizeof(short) ];
  } u;

  u.s = 0x0102;

  if (sizeof(short) == 2)
  {
    if (u.c[0]==0x01 && u.c[1]==0x02)
      puts ("big-endian");
    else if (u.c[0]==0x02 && u.c[1]==0x01)
      puts ("little-endian");
    else
      puts ("unknownn");
  }
  else
    printf ("can't perform my duty: sizeof(short) = %d != 2\n", sizeof(short));

  return 0;
}
Il trucco sta nell'usare il costrutto union per operare una vista su un dato: nel tuo caso basta che dichiari

codice:
  union {
    double s;
    char c [ sizeof(double) ];
  } u;
In ogni caso lo scopo di questa funzione è determinare se una macchina è little endian o big endian e non è modificare un dato in modo così "sporco".
Oregon ha ragione su tutta la linea.
Ciao!