Data type | ||
Decimal representation | ||
Hexadecimal representation | ||
Binary representation |
Sign (1 bit) | Exponent (11 bit) | Mantisa (52 bit) | |
---|---|---|---|
Bin | |||
Hex | |||
Dec |
#include <stdio.h>
#include <stdint.h>
void printFloat(float x)
{
uint32_t hex = *(uint32_t *) &x;
printf("%.8f = 0x%08x\n", x, hex);
}
void printFloatRational(int x, int y)
{
float res = (float) x / y;
uint64_t hex = *(uint32_t *) &res;
printf("%d / %d = %.8f = 0x%08x\n", x, y, res, hex);
}
int main()
{
printFloatRational(1, 3);
printFloatRational(10, 30);
printFloatRational(100, 300);
printFloatRational(1000, 3000);
printFloatRational(12345678, 87654321);
printFloatRational(87654321, 12345678);
printFloatRational(12345678, 87654321);
printFloatRational(12354124, 54123903);
printFloat(0.33333333f);
printFloat(0.5f);
printFloat(0.12345678f);
printFloat(0.87654321f);
printFloat(12345678.12345678f);
}
1 / 3 = 0.33333334 = 0x3eaaaaab
10 / 30 = 0.33333334 = 0x3eaaaaab
100 / 300 = 0.33333334 = 0x3eaaaaab
1000 / 3000 = 0.33333334 = 0x3eaaaaab
12345678 / 87654321 = 0.14084506 = 0x3e1039b0
87654321 / 12345678 = 7.10000038 = 0x40e33334
12345678 / 87654321 = 0.14084506 = 0x3e1039b0
12354124 / 54123903 = 0.22825633 = 0x3e69bc07
0.33333334 = 0x3eaaaaab
0.50000000 = 0x3f000000
0.12345678 = 0x3dfcd6e9
0.87654322 = 0x3f606523
12345678.00000000 = 0x4b3c614e
1 / 3 = 0.33333334 = 0x3eaaaaab
10 / 30 = 0.33333334 = 0x3eaaaaab
100 / 300 = 0.33333334 = 0x3eaaaaab
1000 / 3000 = 0.33333334 = 0x3eaaaaab
12345678 / 87654321 = 0.14084506 = 0x3e1039b0
87654321 / 12345678 = 7.10000038 = 0x40e33334
12345678 / 87654321 = 0.14084506 = 0x3e1039b0
12354124 / 54123903 = 0.22825634 = 0x3e69bc08
0.33333334 = 0x3eaaaaab
0.50000000 = 0x3f000000
0.12345678 = 0x3dfcd6e9
0.87654322 = 0x3f606523
12345678.00000000 = 0x4b3c614e
fild DWORD PTR [ebp+8] ; load 12354124 onto x87 stack (80 bit)
fild DWORD PTR [ebp+12] ; load 54123903 onto x87 stack (80 bit)
fdivp st(1), st ; calculate 12354124 / 54123903
cvtsi2ss xmm0, DWORD PTR 16[rbp] ; load 12354124 to xmm0 register
cvtsi2ss xmm1, DWORD PTR 24[rbp] ; load 54123903 to xmm1 register
divss xmm0, xmm1 ; calculate 12354124 / 54123903