2015-10-02 8 views

ответ

2
//Packing 
float a = 0.45; 
float b = 0.55; 
uint aScaled = a * 0xFFFF; 
uint bScaled = b * 0xFFFF; 
uint abPacked = (aScaled << 16) | (bScaled & 0xFFFF); 
float finalFloat = asfloat(abPacked); 

//Unpacking 
float inputFloat = finalFloat; 
uint uintInput = asuint(inputFloat); 
float aUnpacked = (uintInput >> 16)/65535.0f; 
float bUnpacked = (uintInput & 0xFFFF)/65535.0f; 
+0

Nice. Часть «оптимальной точности» явно фиктивна, так как число бит-бит становится вдвое меньше. Таким образом, все, что можно * сохранить в том, что осталось, можно считать «оптимальным». – usr2564301

+1

Да, я воспринял это как «не тратьте кусочки», а не «делать невозможное»! –