Jak uprościć ten kod?

0

Jest to algorytm odejmowania wielokrotnej precyzji, macie pomysł jak pozbyć się warunku z pętli?
Może jakieś przesunięcia bitowe? Może poprzez rozszerzenie precyzji na long?
Nie bardzo wiem jak zachowują się bity w momencie gdy odejmujemy cyfrę większą od mniejszej.

int c=0;
for(int i=0; i<len; i++){
c+=dst[i]-src[i];
dst[i]=c&0x7FFFFFFF;
if(dst[i]-src[i]+c>=B)
c=0;
else
c=-1;
}

0

c = int(dst[i]-src[i]+c>=B) - 1

0

Przecież to co napisałeś jest jakąś głupotą, nadal jest tam porównanie, rozwiązałem w ten sposób:
int c=0;
for(int i=0; i<len; i++){
c+=dst[i]-src[i];
dst[i]=c&0x7FFFFFFF;
c>>=31;
}

Działa, ale nie jestem pewny do końca, czy dla każdego przypadku.

0
Jula napisał(a):

Nie bardzo wiem jak zachowują się bity w momencie gdy odejmujemy cyfrę większą od mniejszej.

Normalnie, "przekręcają" się na drugą stronę (tzw Overflow). Najstarszy bit wtedy stanowi 1 co oznacza liczbę ujemną (dla typów ze znakiem) a wartość jest reprezentowana wtedy w kodzie U2 (binarnie)

btw. WTF is odejmowanie wielokrotnej precyzji?
Czy Ty przypadkiem nie masz zaimplementować "binarnego" odejmowania?

AAa już wiem, obsługa liczb o wartościach przekraczających zakresy obsługiwanych typów liczbowych:) Norma w mikrokontrolerach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1