|
holland.9 писал(а): 1.Какой результат на выходе операции х=1/2 ? при типе переменной х - unsigned char (8бит 0 to 255)результат будет НОЛЬ.
при целочисленной арифметике всегда при вычислениях получается наименьшее целое число, дробная часть просто отбрасывается. если вы хотите вести расчеты в пределах 0...255 и при этом иметь какое-то подобие точных вычислений, вам придется принудительно увеличить разрядность во всех вычислениях, например, умножив все числа на одно и то же значение, а результат поделить для получения верного результата. если А+Б*С=Д, то верно и такое выражение: А*10+Б*10/С=Д*10.
пример (на месте чисел на самом деле переменные, хотя суть не в этом): (10/4) * (12/5) = 6 прямые целочисленные вычисления: 10/4=2, 12/5=2, 2*2=4. если умножить числители умножить на 10, а результат затем поделить на 100, мы получим полный математический эквивалент: (100/4) * (120/5) / 100 целочисленные вычисления: 100/4=25, 120/5=24, 25*24=600, 600/100=6. итак, в случае прямых вычислений получился ошибочный результат 4, а в случае хитрых вычислений - верный результат 6.
как видите, хитрость повышает точность расчетов.
Не стыдно не знать, стыдно не учиться
|