-2
我要讀定點數任一4個字節或8個字節的,並針對每個項目(一個已知的位置)(號數)固定點數4個字節或8個字節,具有不同的比例因子 - 轉換數字的庫?
是否有這何處自動化庫小數點移動的位置?
C/C++是選擇
的語言例如:
這是假設的20
double toDoublePrecisionFixedPoint(short first,short second,short third,short forth)
{
double d = 0;
int top = (first << 0x10) | (second & 0x0000FFFF);
top/=8;
top >>= 8;
d+=top;
long long a = 0x0;
a = ((long long)second&0x07FF)<< 0x20;
long long t = 0x0;
t = (((long long)third) << 0x10) & 0xFFFF0000;
long long f = 0x0;
f = (((long long) forth)) & 0xFFFF;
long long bottom = a | t | f;
long long maxflag= 0x80000000000;
double dlong = (double)bottom/(double)maxflag;
d += dlong;
return d;
}
這是假設15 浮子toSinglePrecisionFixedPoint的標度的標度(短的第一,短秒) { float f;
float dec = ((float)second)/((float)0x10000);
f = (float)first;
if(f> 0 && dec >0)
f += dec;
else if(f >0 && dec <0)
f += (1 + dec);
else if(f < 0 && dec < 0)
f += dec;
else if(f < 0 && dec >0)
f -= (1 - dec);
else if(f == 0)
f += dec;
return f;
}
void floatToShorts(float f,short*ret)
{
ret[0] = 0x00;
ret[1] = 0x00;
ret[0] = (short)f;
double decimal = 0;
//THIS IS REMOVING THE WHOLE NUMBER
modf(f , &decimal);
ret[1] = (short)(decimal * 0x10000);
}
void doubleToShorts(double d,short*ret)
{
ret[0] = 0x00;
ret[1] = 0x00;
ret[2] = 0x00;
ret[3] = 0x00;
d*=0x80000000000;
long long l = (long long)d;
ret[0] = ((short)((l & 0xFFFF000000000000) >> 48));
ret[1] = ((short)((l & 0x0000FFFF00000000) >> 32));
ret[2] = ((short)((l & 0x00000000FFFF0000) >> 16));
ret[3] = ((short)((l & 0x000000000000FFFF)));
}
這對我來說還好,直到我的項目現在需要一個可變比例的位置。這很好 - 但我只是好奇,如果有更好的方法來做到這一點?必須有一個完整的庫
這很複雜很快,我可以很容易地胖手指的東西讓我的代碼不工作 - 我也肯定我沒有儘可能多的錯誤檢查,因爲我應該 - 很好奇,如果有一個圖書館。
也許你可以解釋更多 - 用例子? – 2013-02-15 19:03:26
np,編輯已作出感謝尋找 – morty346 2013-02-15 20:03:41