Какую лучшую эвристику я могу использовать, чтобы определить, является ли блок X 4-байтов целыми числами или поплавками? Человек может сделать это легко, но я хотел сделать это программно.
Я понимаю, что, поскольку каждая комбинация битов приведет к действительному целому числу и (почти?), все из них также приведут к действительному поплату, нет никакого способа узнать наверняка. Но я все же хотел бы определить наиболее вероятного кандидата (который будет практически всегда правильным, или, по крайней мере, человек может это сделать).
Например, возьмите серию 4-байтовых исходных данных и сначала напечатайте их как целые числа, а затем как float:
1 1.4013e-45 10 1.4013e-44 44 6.16571e-44 5000 7.00649e-42 1024 1.43493e-42 0 0 0 0 -5 -nan 11 1.54143e-44
Очевидно, что они будут целыми числами.
Теперь, еще один пример:
1065353216 1 1084227584 5 1085276160 5.5 1068149391 1.33333 1083179008 4.5 1120403456 100 0 0 -1110651699 -0.1 1195593728 50000
Это, очевидно, будут поплавки.
PS: Я использую С++, но вы можете отвечать на любом языке, псевдокоде или просто на английском языке.