mám takovýto vzorec Umax = 3 * 2^Level-2 - 1 ... který jsem opsal, ale mělo by to správně být takto:
3 * (2^Level-2) - 1
Level je hodnota od 0 do 15.
Tabulka výsledků, jak mají být správně:
Umax = 3 * 2{level-2} - 1
8 bits | Posun = 2*level-2 exp. result Umax=HEX
0 -4 2*-2 -4 0
0 -2 2*-1 -2 0
000000000000000010 0 2*0 0 2 0x02
000000000000000101 1 2*1 2 5 0x05
000000000000001011 2 2*2 4 11 0x0B
000000000000010111 3 2*3 6 23 0x17
000000000000101111 4 2*4 8 47 0x2F
000000000001011111 5 2*5 10 95 0x5F
000000000010111111 6 2*6 12 191 0xBF
000000000101111111 7 2*7 14 383 0x17F
000000001011111111 8 2*8 16 767 0x2FF
000000010111111111 9 2*9 18 1535 0x5FF
000000101111111111 10 2*10 20 3071 0xBFF
000001011111111111 11 2*11 22 6143 0x17FF
000010111111111111 12 2*12 24 12287 0x2FFF
000101111111111111 13 2*13 26 24575 0x5FFF
001011111111111111 14 2*14 28 49151 0xBFFF
010111111111111111 15 2*15 30 98303 0x17FFF
101111111111111111 16 2*16 32 196607 0x2FFFF
Používám tento kód:
int Umax, Vmax, level=2;
for (;level<19;level++){
Umax = 3 * ipow(2,level-2) - 1; // ipow je mocnina integeru
}
Schválně jsem přeskočil první dva výsledky. To co dostávám během ladění:
1. level == 2 ; level - 2 == 0 ; umax == -1 ... špatně ale budiž, jdu na další cyklus:
2. level == 3 ; level - 2 == 1 ; umax == 11 !!! Vůbec jsem nedostal 2 a 5, dvě hodnoty to přeskočilo
3. level == 4 ; level - 2 == 2 ; umax == 47 přeskočilo to hodnotu 23 !!! Prostě nechápu...
Funkce ipow kód jsem uvedl v předchozím vlákně