Pevná řádová čárka
Moderátor: Moderátoři
Pevná řádová čárka
Ahoj. Potřeboval bych poradit s výpočty v pevné řádové čárce. Aktuálně se snažím rozchodit násobení celého čísla číslem desetinným, dejme tomu např. 853 * -0,425. Pro zobrazení desetinného čísla se běžně na 16ti bitových MCU používá formát Q15, tedy nejvyšší bit nese znaménko a následující už vlastní hodnotu. Protože počítám jak s celými čísly, tak desetinnými, chtěl jsem aplikovat formát Q15.16, kdy by informaci o znaménku nesla celá část. A teď, co jsem ne zcela pochopil: jak v tomto formátu zakódovat těch -0,425. Když nastavím MSB celé části do jedničky (= záporné číslo), a zbývající bity do nuly, nebude celá část rovna nule, ale dle dvojkového doplňku -32768. Jediné, co mě napadlo, by bylo se na dvojkový doplněk vykašlat a hold mít dvě nuly, zápornou a kladnou. Ještě mě napadlo použít strukturu s dvěma položkami: celou částí a desetinnou částí, kdy by každá z nich měla znaménkový bit. Nemáte někdo více zkušeností s pevnou řádovou čárkou, každá informace dobrá. Děkuji moc.
Vynásob číslem 1000x větším a ve výsledku posuň desetinnou tečku o 3 místa doleva.
Kód: Vybrat vše
//avr-gcc
int32_t x, cela_cast, tisiciny;
char string[9];
int main()
{
// x = 853 * -0,425 // -362,525
x = 853L * -425; // -362525
cela_cast = x/1000; // -362
tisiciny = labs(x%1000); // 525
sprintf(string,"%ld.%03ld",cela_cast, tisiciny); //string = "-362.525"