Программирование игр для Windows. Советы профессионала


ТЕХНИКА ОПТИМИЗАЦИИ - часть 18


Мы используем 256, так как у нас есть восемь двоичных цифр, a 28 равно 256.

Как, ни странно, но наибольшее число, которое может быть получено в результате умножения — это 32761, а величина чисел для сложения может достигать примерно 8000000? Ну что ж... где-то мы нашли, а где-то потеряли.

Чтобы помочь вам в экспериментах с числами с фиксированной запятой и увидеть некоторые их интересные свойства, я создал небольшую библиотеку и программу main() для демонстрации их использования (Листинг 18.2). Я предлагаю вам потратить немного времени, чтобы получить действительно целостное понимание сути чисел с фиксированной запятой, поскольку это очень важно и про это мало кто знает. Никогда не надо забывать, что десятичная запятая является воображаемой!

Листинг 18.2. Функции библиотеки системы с фиксированной запятой (FIX.C).

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ ///////////////////////////////

#include <math.h>

#include <stdio.h>

// определим наш новый тип чисел с фиксированной запятой

typedef long fixed;

//ФУНКЦИИ ///////////////////////////////////////////

fixed Assign_Integer(long integer)

{

return((fixed)integer << 8);

} // конец функции присваивания целочисленного значения ////////////////////////////////////////////////////////////

fixed Assign_Float(float number)

{

return((fixed)(number * 256)};

} // конец функции присваивания значения с плавающей запятой ////////////////////////////////////////////////////////////

fixed Mul_Fixed(fixed fl,fixed f2)

{

return ((fl*f2) >> 8);

} //конец функции умножения ////////////////////////////////////////////////////////////

fixed Add_Fixed(fixed fl,fixed f2)

{

return(f1+f2);

} // конец функции сложения ////////////////////////////////////////////////////////////

Print_Fixed(fixed fl)

{

printf("%ld.%ld", f1>>8, 100*(unsigned long) (f1 & 0x00ff)/256);

} // конец функции вывода числа с фиксированной запятой

// ОСНОВНАЯ ПРОГРАММА //////////////////////////////////////

main(}

{




Начало  Назад  Вперед



Книжный магазин