О причинах и методах обхода сабжа я знаю, да видно плохо :-( Есть некоторая прога, когда в одной из строк убираю "лишние" множители (16384), поведение меняется: Код (Text): unsigned foo(unsigned arg); unsigned bar; // foo ( bar * (32 + (unsigned)((__int64)(8 * 44100 << 6 ) * 16384 / 1773400)) / 16384 ); Может кто подскажет, как тут скобочки правильно расставлять ? (пока в HELHEIM не переместили
S_T_A_S_ При такой расстановке скобок (32 + (unsigned)((__int64)(8 * 44100 << 6 ) * 16384 / 1773400)) является константой. А откуда такое странное число 1773400?
Про константу понятно я просто пытался это выражение упростить (изначально там было штук 20 макроконстант) На экран не помещалось, да и глаз замылился, минут 20 просидел, не мог понять, почему константа меняется, если убрать числа 16384 8-) > Это тактовая частота музыкального сопроцессора AY-3-8912 (YM-8910) на Спектруме.
S_T_A_S_ Мне кажется, что (__int64) не работает. Может так ....... (__int64)8 * 44100 ..... И потом - не проще у Виндусового калькулятора спросить. Кстати, если транслятор для проца какого-то, то он может вообще в 32-битах работать. У меня например вообще 16-бит, хотя константы длинные понимает.
valterg Тут дело не в (__int64) Вот здесь 5 правых скобк, но левых 4 !!!!!! (unsigned)((__int64)(8 * 44100 << 6 ) * 16384 / 1773400)) / 16384 т.е на 16384 делится не произвеедение, а сумма 32 + ... Это один из самых тупых глюков, которые со мной происходили =)))))) А всё потому что шрифт в редакторе слишком крупный =)))