Имеем вот такой расчет:
a=400000000
b=(a*4294967296)/1250000000=1374389534.72
Это мне посчитал маткад. Проверил на калькуляторе - сходится.
Теперь вот такой код в IAR для AtMega:
long unsigned int a=0;
long unsigned int b=0;
a=400000000;
b=(long int)(((long float)(a*4294967296))/1250000000);
запускаем Proteus 8.0 и смотрим переменную:
1374389504
Куда делась дробная часть понятно, как позже сделать нормальное округление тоже в курсе. Но куда делась тройка? Почему там 0? Это глюк протеуса?
Если бы я накосячил в коде, то результат бы отличался радикально, а не на один знак в середине числа.


