AWOL:

It's a 29 bit number - no investigation required.

29 into 23 doesn't go.

I am interested to know the 'root cause' that is boosting the value by 9 units -- 474780032.00 instead of 474780023.00. Can we get it just from intuition without doing any rational investigation?

The OP has given the following integer number:

unsigned long x = 474780023;

==> 1C4C9177

==> 1 1100 0100 1100 1001 0001 0111 0111

==> (1.1100 0100 1100 1001 0001 0111 0111)_{2}*2^{28} --------[1]

Let us fit it into the following (Fig-1) binary32 template:

Figure-1: binary32 template for 32-bit float number

Sign-bit: 0

Biased exponent (8-bit) = 28 (from [1]) + 127 (fixed bias) = 155 = 9B = 10011011

Binary fraction (23-bit) = 1100 0100 1100 1001 0001 011~~1 0111~~ (from [1]) //5 bits are lost ---[2]

Putting the above 3 components in line, we get: 0 10011011 1100 0100 1100 1001 0001 011

==> (arranging in nibbles) 0100 1101 1110 0010 0110 0100 1000 1011

==> (in hex format) 4DE2648B

Let us execute the following codes in UNO (in UNO and DUE floats are same) and see what value we get for the manually calculated 32-bit (binary32) value of 4DE2648B. (Do we expect more or less?)

```
union
{
float x;
byte myData[4] = {0x8B, 0x64, 0xE2, 0x4D};
}data;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(data.x, 2); //shows: 474780000.00
delay(1000);
}
```

The program reports 474780000.00 instead of 474780023.00. There is a loss of information (4.86*10^{-6}%); but, it is not a loss from practical point of view; but, it is a loss from calculation point of view. The root cause of this loss is attributed to the 5-bit that we have lost in [2].

So, how can we establish similar model to justify the gain in information (474780032.00 in place of 474780023.00)?