Takže to nakonec byly ty hrušky a jabka, jak jsem tušil.Pravidla jsou taková, jaká si je programátor udělá. Ale obecně vzato je lepší programovat vlastní program s velkorysým definováním (tedy je zbytečné definovat unsigned, nebo 16bit...) a až teprve při optimalizaci programu začít škrtat. Prvně pro drtivou většinu programů uživatelů jsou výkony dnešních PC silně naddimenzovány a za druhé předejdeš právě takovým vymrdávkám, jako je je právě tento případ, kdy překladač nejspíše nezvládl se v mezipaměti vypořádat s faktem, že signed (buhví co) a unsigned (16bit integer) hodnota hází unsigned (16bit integer). A to, že se to celé ve finále ukládalo do signed 16bit integer, která má pro daný výpočet dostatečnou kapacitu (+-32768) překladač nebral v potaz. Nejspíše se přizpůsoboval proměnné s nejnižším definovaným rozsahem (uint16) a záporná hodnota ho totálně rozhodila a zvoral i následné multiplikace. Dokonce bych podle chybného výsledku tipnul, jestli si hvězdičku nevyložil jako pointer protože do výpočtu zakomponoval všechny hodnoty až na CONST1, která by ale skrze pointer měla boolean hodnotu vyjádřenou v integer jako -1.Mno, hlavně že jsi to vyřešil.