Больше макросов! Хороших и разных
|
|
Среда, 02 Августа 2017 г. 20:41
+ в цитатник
Любители вы Сишные макросы, так как люблю их я?
При разработке встроенного программного обеспечения часто возникает задача умножения на константу меньше единицы. Типовая задача — рекурсивный фильтр. Умножать на константу легко и приятно, если у вас на борту: много мегагерцев, арифметика с плавающей точкой, аппаратный делитель. А если этого нет? Если любое преобразование во float грозит крахом?
Для решения этих проблем издревле повелось приводить константу к дроби с основанием степень двойки. Например число 0.4 приближенно можно представить как 102/256. Тогда умножение переменной «а» на 0.4, будет выглядеть следующим образом: (а*102)>>8.
Но при разработке реальных программ можно «выстрелить себе в ногу». Для сохранности ваших ног и всего остального рекомендую пользоваться следующими макросами.
Листинг файла «um.h» под катом
Листинг файла um.h#ifndef __UM_H
#define __UM_H
//Макросы для умножения на дробную константу в целых числах
//константа кратная 1/8
#define UM8(CONST_FLOAT,CHISLO_INT) \
((CONST_FLOAT+1.0/16)<(1.0/8))?((CHISLO_INT*0)>>3):\
(((CONST_FLOAT+1.0/16)<(2.0/8))?((CHISLO_INT*1)>>3):\
(((CONST_FLOAT+1.0/16)<(3.0/8))?((CHISLO_INT*2)>>3):\
(((CONST_FLOAT+1.0/16)<(4.0/8))?((CHISLO_INT*3)>>3):\
(((CONST_FLOAT+1.0/16)<(5.0/8))?((CHISLO_INT*4)>>3):\
(((CONST_FLOAT+1.0/16)<(6.0/8))?((CHISLO_INT*5)>>3):\
(((CONST_FLOAT+1.0/16)<(7.0/8))?((CHISLO_INT*6)>>3):\
(((CONST_FLOAT+1.0/16)<(8.0/8))?((CHISLO_INT*7)>>3):\
(CHISLO_INT)\
)\
)\
)\
)\
)\
)\
)
//константа кратная 1/16
#define UM16(CONST_FLOAT,CHISLO_INT) \
((CONST_FLOAT+(1.0/32))<(1.0/16))?((CHISLO_INT*0)>>4):\
(((CONST_FLOAT+(1.0/32))<(2.0/16))?((CHISLO_INT*1)>>4):\
(((CONST_FLOAT+(1.0/32))<(3.0/16))?((CHISLO_INT*2)>>4):\
(((CONST_FLOAT+(1.0/32))<(4.0/16))?((CHISLO_INT*3)>>4):\
(((CONST_FLOAT+(1.0/32))<(5.0/16))?((CHISLO_INT*4)>>4):\
(((CONST_FLOAT+(1.0/32))<(6.0/16))?((CHISLO_INT*5)>>4):\
(((CONST_FLOAT+(1.0/32))<(7.0/16))?((CHISLO_INT*6)>>4):\
(((CONST_FLOAT+(1.0/32))<(8.0/16))?((CHISLO_INT*7)>>4):\
(((CONST_FLOAT+(1.0/32))<(9.0/16))?((CHISLO_INT*8)>>4):\
(((CONST_FLOAT+(1.0/32))<(10.0/16))?((CHISLO_INT*9)>>4):\
(((CONST_FLOAT+(1.0/32))<(11.0/16))?((CHISLO_INT*10)>>4):\
(((CONST_FLOAT+(1.0/32))<(12.0/16))?((CHISLO_INT*11)>>4):\
(((CONST_FLOAT+(1.0/32))<(13.0/16))?((CHISLO_INT*12)>>4):\
(((CONST_FLOAT+(1.0/32))<(14.0/16))?((CHISLO_INT*13)>>4):\
(((CONST_FLOAT+(1.0/32))<(15.0/16))?((CHISLO_INT*14)>>4):\
(((CONST_FLOAT+(1.0/32))<(16.0/16))?((CHISLO_INT*15)>>4):\
(CHISLO_INT)\
)))))))))))))))
//константа кратная 1/32
#define UM32(CONST_FLOAT,CHISLO_INT) \
((CONST_FLOAT+(1.0/64))<(1.0/32))?((CHISLO_INT*0)>>5):\
(((CONST_FLOAT+(1.0/64))<(2.0/32))?((CHISLO_INT*1)>>5):\
(((CONST_FLOAT+(1.0/64))<(3.0/32))?((CHISLO_INT*2)>>5):\
(((CONST_FLOAT+(1.0/64))<(4.0/32))?((CHISLO_INT*3)>>5):\
(((CONST_FLOAT+(1.0/64))<(5.0/32))?((CHISLO_INT*4)>>5):\
(((CONST_FLOAT+(1.0/64))<(6.0/32))?((CHISLO_INT*5)>>5):\
(((CONST_FLOAT+(1.0/64))<(7.0/32))?((CHISLO_INT*6)>>5):\
(((CONST_FLOAT+(1.0/64))<(8.0/32))?((CHISLO_INT*7)>>5):\
(((CONST_FLOAT+(1.0/64))<(9.0/32))?((CHISLO_INT*8)>>5):\
(((CONST_FLOAT+(1.0/64))<(10.0/32))?((CHISLO_INT*9)>>5):\
(((CONST_FLOAT+(1.0/64))<(11.0/32))?((CHISLO_INT*10)>>5):\
(((CONST_FLOAT+(1.0/64))<(12.0/32))?((CHISLO_INT*11)>>5):\
(((CONST_FLOAT+(1.0/64))<(13.0/32))?((CHISLO_INT*12)>>5):\
(((CONST_FLOAT+(1.0/64))<(14.0/32))?((CHISLO_INT*13)>>5):\
(((CONST_FLOAT+(1.0/64))<(15.0/32))?((CHISLO_INT*14)>>5):\
(((CONST_FLOAT+(1.0/64))<(16.0/32))?((CHISLO_INT*15)>>5):\
(((CONST_FLOAT+(1.0/64))<(17.0/32))?((CHISLO_INT*16)>>5):\
(((CONST_FLOAT+(1.0/64))<(18.0/32))?((CHISLO_INT*17)>>5):\
(((CONST_FLOAT+(1.0/64))<(19.0/32))?((CHISLO_INT*18)>>5):\
(((CONST_FLOAT+(1.0/64))<(20.0/32))?((CHISLO_INT*19)>>5):\
(((CONST_FLOAT+(1.0/64))<(21.0/32))?((CHISLO_INT*20)>>5):\
(((CONST_FLOAT+(1.0/64))<(22.0/32))?((CHISLO_INT*21)>>5):\
(((CONST_FLOAT+(1.0/64))<(23.0/32))?((CHISLO_INT*22)>>5):\
(((CONST_FLOAT+(1.0/64))<(24.0/32))?((CHISLO_INT*23)>>5):\
(((CONST_FLOAT+(1.0/64))<(25.0/32))?((CHISLO_INT*24)>>5):\
(((CONST_FLOAT+(1.0/64))<(26.0/32))?((CHISLO_INT*25)>>5):\
(((CONST_FLOAT+(1.0/64))<(27.0/32))?((CHISLO_INT*26)>>5):\
(((CONST_FLOAT+(1.0/64))<(28.0/32))?((CHISLO_INT*27)>>5):\
(((CONST_FLOAT+(1.0/64))<(29.0/32))?((CHISLO_INT*28)>>5):\
(((CONST_FLOAT+(1.0/64))<(30.0/32))?((CHISLO_INT*29)>>5):\
(((CONST_FLOAT+(1.0/64))<(31.0/32))?((CHISLO_INT*30)>>5):\
(((CONST_FLOAT+(1.0/64))<(32.0/32))?((CHISLO_INT*31)>>5):\
(CHISLO_INT)\
)))))))))))))))))))))))))))))))
//константа кратная 1/64
#define UM64(CONST_FLOAT,CHISLO_INT) \
((CONST_FLOAT+(1.0/128))<(1.0/64))?((CHISLO_INT*0)>>6):\
(((CONST_FLOAT+(1.0/128))<(2.0/64))?((CHISLO_INT*1)>>6):\
(((CONST_FLOAT+(1.0/128))<(3.0/64))?((CHISLO_INT*2)>>6):\
(((CONST_FLOAT+(1.0/128))<(4.0/64))?((CHISLO_INT*3)>>6):\
(((CONST_FLOAT+(1.0/128))<(5.0/64))?((CHISLO_INT*4)>>6):\
(((CONST_FLOAT+(1.0/128))<(6.0/64))?((CHISLO_INT*5)>>6):\
(((CONST_FLOAT+(1.0/128))<(7.0/64))?((CHISLO_INT*6)>>6):\
(((CONST_FLOAT+(1.0/128))<(8.0/64))?((CHISLO_INT*7)>>6):\
(((CONST_FLOAT+(1.0/128))<(9.0/64))?((CHISLO_INT*8)>>6):\
(((CONST_FLOAT+(1.0/128))<(10.0/64))?((CHISLO_INT*9)>>6):\
(((CONST_FLOAT+(1.0/128))<(11.0/64))?((CHISLO_INT*10)>>6):\
(((CONST_FLOAT+(1.0/128))<(12.0/64))?((CHISLO_INT*11)>>6):\
(((CONST_FLOAT+(1.0/128))<(13.0/64))?((CHISLO_INT*12)>>6):\
(((CONST_FLOAT+(1.0/128))<(14.0/64))?((CHISLO_INT*13)>>6):\
(((CONST_FLOAT+(1.0/128))<(15.0/64))?((CHISLO_INT*14)>>6):\
(((CONST_FLOAT+(1.0/128))<(16.0/64))?((CHISLO_INT*15)>>6):\
(((CONST_FLOAT+(1.0/128))<(17.0/64))?((CHISLO_INT*16)>>6):\
(((CONST_FLOAT+(1.0/128))<(18.0/64))?((CHISLO_INT*17)>>6):\
(((CONST_FLOAT+(1.0/128))<(19.0/64))?((CHISLO_INT*18)>>6):\
(((CONST_FLOAT+(1.0/128))<(20.0/64))?((CHISLO_INT*19)>>6):\
(((CONST_FLOAT+(1.0/128))<(21.0/64))?((CHISLO_INT*20)>>6):\
(((CONST_FLOAT+(1.0/128))<(22.0/64))?((CHISLO_INT*21)>>6):\
(((CONST_FLOAT+(1.0/128))<(23.0/64))?((CHISLO_INT*22)>>6):\
(((CONST_FLOAT+(1.0/128))<(24.0/64))?((CHISLO_INT*23)>>6):\
(((CONST_FLOAT+(1.0/128))<(25.0/64))?((CHISLO_INT*24)>>6):\
(((CONST_FLOAT+(1.0/128))<(26.0/64))?((CHISLO_INT*25)>>6):\
(((CONST_FLOAT+(1.0/128))<(27.0/64))?((CHISLO_INT*26)>>6):\
(((CONST_FLOAT+(1.0/128))<(28.0/64))?((CHISLO_INT*27)>>6):\
(((CONST_FLOAT+(1.0/128))<(29.0/64))?((CHISLO_INT*28)>>6):\
(((CONST_FLOAT+(1.0/128))<(30.0/64))?((CHISLO_INT*29)>>6):\
(((CONST_FLOAT+(1.0/128))<(31.0/64))?((CHISLO_INT*30)>>6):\
(((CONST_FLOAT+(1.0/128))<(32.0/64))?((CHISLO_INT*31)>>6):\
(((CONST_FLOAT+(1.0/128))<(33.0/64))?((CHISLO_INT*32)>>6):\
(((CONST_FLOAT+(1.0/128))<(34.0/64))?((CHISLO_INT*33)>>6):\
(((CONST_FLOAT+(1.0/128))<(35.0/64))?((CHISLO_INT*34)>>6):\
(((CONST_FLOAT+(1.0/128))<(36.0/64))?((CHISLO_INT*35)>>6):\
(((CONST_FLOAT+(1.0/128))<(37.0/64))?((CHISLO_INT*36)>>6):\
(((CONST_FLOAT+(1.0/128))<(38.0/64))?((CHISLO_INT*37)>>6):\
(((CONST_FLOAT+(1.0/128))<(39.0/64))?((CHISLO_INT*38)>>6):\
(((CONST_FLOAT+(1.0/128))<(40.0/64))?((CHISLO_INT*39)>>6):\
(((CONST_FLOAT+(1.0/128))<(41.0/64))?((CHISLO_INT*40)>>6):\
(((CONST_FLOAT+(1.0/128))<(42.0/64))?((CHISLO_INT*41)>>6):\
(((CONST_FLOAT+(1.0/128))<(43.0/64))?((CHISLO_INT*42)>>6):\
(((CONST_FLOAT+(1.0/128))<(44.0/64))?((CHISLO_INT*43)>>6):\
(((CONST_FLOAT+(1.0/128))<(45.0/64))?((CHISLO_INT*44)>>6):\
(((CONST_FLOAT+(1.0/128))<(46.0/64))?((CHISLO_INT*45)>>6):\
(((CONST_FLOAT+(1.0/128))<(47.0/64))?((CHISLO_INT*46)>>6):\
(((CONST_FLOAT+(1.0/128))<(48.0/64))?((CHISLO_INT*47)>>6):\
(((CONST_FLOAT+(1.0/128))<(49.0/64))?((CHISLO_INT*48)>>6):\
(((CONST_FLOAT+(1.0/128))<(50.0/64))?((CHISLO_INT*49)>>6):\
(((CONST_FLOAT+(1.0/128))<(51.0/64))?((CHISLO_INT*50)>>6):\
(((CONST_FLOAT+(1.0/128))<(52.0/64))?((CHISLO_INT*51)>>6):\
(((CONST_FLOAT+(1.0/128))<(53.0/64))?((CHISLO_INT*52)>>6):\
(((CONST_FLOAT+(1.0/128))<(54.0/64))?((CHISLO_INT*53)>>6):\
(((CONST_FLOAT+(1.0/128))<(55.0/64))?((CHISLO_INT*54)>>6):\
(((CONST_FLOAT+(1.0/128))<(56.0/64))?((CHISLO_INT*55)>>6):\
(((CONST_FLOAT+(1.0/128))<(57.0/64))?((CHISLO_INT*56)>>6):\
(((CONST_FLOAT+(1.0/128))<(58.0/64))?((CHISLO_INT*57)>>6):\
(((CONST_FLOAT+(1.0/128))<(59.0/64))?((CHISLO_INT*58)>>6):\
(((CONST_FLOAT+(1.0/128))<(60.0/64))?((CHISLO_INT*59)>>6):\
(((CONST_FLOAT+(1.0/128))<(61.0/64))?((CHISLO_INT*60)>>6):\
(((CONST_FLOAT+(1.0/128))<(62.0/64))?((CHISLO_INT*61)>>6):\
(((CONST_FLOAT+(1.0/128))<(63.0/64))?((CHISLO_INT*62)>>6):\
(((CONST_FLOAT+(1.0/128))<(64.0/64))?((CHISLO_INT*63)>>6):\
(CHISLO_INT)\
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
//константа кратная 1/128
#define UM128(CONST_FLOAT,CHISLO_INT) \
((CONST_FLOAT+(1.0/256))<(1.0/128))?((CHISLO_INT*0)>>7):\
(((CONST_FLOAT+(1.0/256))<(2.0/128))?((CHISLO_INT*1)>>7):\
(((CONST_FLOAT+(1.0/256))<(3.0/128))?((CHISLO_INT*2)>>7):\
(((CONST_FLOAT+(1.0/256))<(4.0/128))?((CHISLO_INT*3)>>7):\
(((CONST_FLOAT+(1.0/256))<(5.0/128))?((CHISLO_INT*4)>>7):\
(((CONST_FLOAT+(1.0/256))<(6.0/128))?((CHISLO_INT*5)>>7):\
(((CONST_FLOAT+(1.0/256))<(7.0/128))?((CHISLO_INT*6)>>7):\
(((CONST_FLOAT+(1.0/256))<(8.0/128))?((CHISLO_INT*7)>>7):\
(((CONST_FLOAT+(1.0/256))<(9.0/128))?((CHISLO_INT*8)>>7):\
(((CONST_FLOAT+(1.0/256))<(10.0/128))?((CHISLO_INT*9)>>7):\
(((CONST_FLOAT+(1.0/256))<(11.0/128))?((CHISLO_INT*10)>>7):\
(((CONST_FLOAT+(1.0/256))<(12.0/128))?((CHISLO_INT*11)>>7):\
(((CONST_FLOAT+(1.0/256))<(13.0/128))?((CHISLO_INT*12)>>7):\
(((CONST_FLOAT+(1.0/256))<(14.0/128))?((CHISLO_INT*13)>>7):\
(((CONST_FLOAT+(1.0/256))<(15.0/128))?((CHISLO_INT*14)>>7):\
(((CONST_FLOAT+(1.0/256))<(16.0/128))?((CHISLO_INT*15)>>7):\
(((CONST_FLOAT+(1.0/256))<(17.0/128))?((CHISLO_INT*16)>>7):\
(((CONST_FLOAT+(1.0/256))<(18.0/128))?((CHISLO_INT*17)>>7):\
(((CONST_FLOAT+(1.0/256))<(19.0/128))?((CHISLO_INT*18)>>7):\
(((CONST_FLOAT+(1.0/256))<(20.0/128))?((CHISLO_INT*19)>>7):\
(((CONST_FLOAT+(1.0/256))<(21.0/128))?((CHISLO_INT*20)>>7):\
(((CONST_FLOAT+(1.0/256))<(22.0/128))?((CHISLO_INT*21)>>7):\
(((CONST_FLOAT+(1.0/256))<(23.0/128))?((CHISLO_INT*22)>>7):\
(((CONST_FLOAT+(1.0/256))<(24.0/128))?((CHISLO_INT*23)>>7):\
(((CONST_FLOAT+(1.0/256))<(25.0/128))?((CHISLO_INT*24)>>7):\
(((CONST_FLOAT+(1.0/256))<(26.0/128))?((CHISLO_INT*25)>>7):\
(((CONST_FLOAT+(1.0/256))<(27.0/128))?((CHISLO_INT*26)>>7):\
(((CONST_FLOAT+(1.0/256))<(28.0/128))?((CHISLO_INT*27)>>7):\
(((CONST_FLOAT+(1.0/256))<(29.0/128))?((CHISLO_INT*28)>>7):\
(((CONST_FLOAT+(1.0/256))<(30.0/128))?((CHISLO_INT*29)>>7):\
(((CONST_FLOAT+(1.0/256))<(31.0/128))?((CHISLO_INT*30)>>7):\
(((CONST_FLOAT+(1.0/256))<(32.0/128))?((CHISLO_INT*31)>>7):\
(((CONST_FLOAT+(1.0/256))<(33.0/128))?((CHISLO_INT*32)>>7):\
(((CONST_FLOAT+(1.0/256))<(34.0/128))?((CHISLO_INT*33)>>7):\
(((CONST_FLOAT+(1.0/256))<(35.0/128))?((CHISLO_INT*34)>>7):\
(((CONST_FLOAT+(1.0/256))<(36.0/128))?((CHISLO_INT*35)>>7):\
(((CONST_FLOAT+(1.0/256))<(37.0/128))?((CHISLO_INT*36)>>7):\
(((CONST_FLOAT+(1.0/256))<(38.0/128))?((CHISLO_INT*37)>>7):\
(((CONST_FLOAT+(1.0/256))<(39.0/128))?((CHISLO_INT*38)>>7):\
(((CONST_FLOAT+(1.0/256))<(40.0/128))?((CHISLO_INT*39)>>7):\
(((CONST_FLOAT+(1.0/256))<(41.0/128))?((CHISLO_INT*40)>>7):\
(((CONST_FLOAT+(1.0/256))<(42.0/128))?((CHISLO_INT*41)>>7):\
(((CONST_FLOAT+(1.0/256))<(43.0/128))?((CHISLO_INT*42)>>7):\
(((CONST_FLOAT+(1.0/256))<(44.0/128))?((CHISLO_INT*43)>>7):\
(((CONST_FLOAT+(1.0/256))<(45.0/128))?((CHISLO_INT*44)>>7):\
(((CONST_FLOAT+(1.0/256))<(46.0/128))?((CHISLO_INT*45)>>7):\
(((CONST_FLOAT+(1.0/256))<(47.0/128))?((CHISLO_INT*46)>>7):\
(((CONST_FLOAT+(1.0/256))<(48.0/128))?((CHISLO_INT*47)>>7):\
(((CONST_FLOAT+(1.0/256))<(49.0/128))?((CHISLO_INT*48)>>7):\
(((CONST_FLOAT+(1.0/256))<(50.0/128))?((CHISLO_INT*49)>>7):\
(((CONST_FLOAT+(1.0/256))<(51.0/128))?((CHISLO_INT*50)>>7):\
(((CONST_FLOAT+(1.0/256))<(52.0/128))?((CHISLO_INT*51)>>7):\
(((CONST_FLOAT+(1.0/256))<(53.0/128))?((CHISLO_INT*52)>>7):\
(((CONST_FLOAT+(1.0/256))<(54.0/128))?((CHISLO_INT*53)>>7):\
(((CONST_FLOAT+(1.0/256))<(55.0/128))?((CHISLO_INT*54)>>7):\
(((CONST_FLOAT+(1.0/256))<(56.0/128))?((CHISLO_INT*55)>>7):\
(((CONST_FLOAT+(1.0/256))<(57.0/128))?((CHISLO_INT*56)>>7):\
(((CONST_FLOAT+(1.0/256))<(58.0/128))?((CHISLO_INT*57)>>7):\
(((CONST_FLOAT+(1.0/256))<(59.0/128))?((CHISLO_INT*58)>>7):\
(((CONST_FLOAT+(1.0/256))<(60.0/128))?((CHISLO_INT*59)>>7):\
(((CONST_FLOAT+(1.0/256))<(61.0/128))?((CHISLO_INT*60)>>7):\
(((CONST_FLOAT+(1.0/256))<(62.0/128))?((CHISLO_INT*61)>>7):\
(((CONST_FLOAT+(1.0/256))<(63.0/128))?((CHISLO_INT*62)>>7):\
(((CONST_FLOAT+(1.0/256))<(64.0/128))?((CHISLO_INT*63)>>7):\
(((CONST_FLOAT+(1.0/256))<(65.0/128))?((CHISLO_INT*64)>>7):\
(((CONST_FLOAT+(1.0/256))<(66.0/128))?((CHISLO_INT*65)>>7):\
(((CONST_FLOAT+(1.0/256))<(67.0/128))?((CHISLO_INT*66)>>7):\
(((CONST_FLOAT+(1.0/256))<(68.0/128))?((CHISLO_INT*67)>>7):\
(((CONST_FLOAT+(1.0/256))<(69.0/128))?((CHISLO_INT*68)>>7):\
(((CONST_FLOAT+(1.0/256))<(70.0/128))?((CHISLO_INT*69)>>7):\
(((CONST_FLOAT+(1.0/256))<(71.0/128))?((CHISLO_INT*70)>>7):\
(((CONST_FLOAT+(1.0/256))<(72.0/128))?((CHISLO_INT*71)>>7):\
(((CONST_FLOAT+(1.0/256))<(73.0/128))?((CHISLO_INT*72)>>7):\
(((CONST_FLOAT+(1.0/256))<(74.0/128))?((CHISLO_INT*73)>>7):\
(((CONST_FLOAT+(1.0/256))<(75.0/128))?((CHISLO_INT*74)>>7):\
(((CONST_FLOAT+(1.0/256))<(76.0/128))?((CHISLO_INT*75)>>7):\
(((CONST_FLOAT+(1.0/256))<(77.0/128))?((CHISLO_INT*76)>>7):\
(((CONST_FLOAT+(1.0/256))<(78.0/128))?((CHISLO_INT*77)>>7):\
(((CONST_FLOAT+(1.0/256))<(79.0/128))?((CHISLO_INT*78)>>7):\
(((CONST_FLOAT+(1.0/256))<(80.0/128))?((CHISLO_INT*79)>>7):\
(((CONST_FLOAT+(1.0/256))<(81.0/128))?((CHISLO_INT*80)>>7):\
(((CONST_FLOAT+(1.0/256))<(82.0/128))?((CHISLO_INT*81)>>7):\
(((CONST_FLOAT+(1.0/256))<(83.0/128))?((CHISLO_INT*82)>>7):\
(((CONST_FLOAT+(1.0/256))<(84.0/128))?((CHISLO_INT*83)>>7):\
(((CONST_FLOAT+(1.0/256))<(85.0/128))?((CHISLO_INT*84)>>7):\
(((CONST_FLOAT+(1.0/256))<(86.0/128))?((CHISLO_INT*85)>>7):\
(((CONST_FLOAT+(1.0/256))<(87.0/128))?((CHISLO_INT*86)>>7):\
(((CONST_FLOAT+(1.0/256))<(88.0/128))?((CHISLO_INT*87)>>7):\
(((CONST_FLOAT+(1.0/256))<(89.0/128))?((CHISLO_INT*88)>>7):\
(((CONST_FLOAT+(1.0/256))<(90.0/128))?((CHISLO_INT*89)>>7):\
(((CONST_FLOAT+(1.0/256))<(91.0/128))?((CHISLO_INT*90)>>7):\
(((CONST_FLOAT+(1.0/256))<(92.0/128))?((CHISLO_INT*91)>>7):\
(((CONST_FLOAT+(1.0/256))<(93.0/128))?((CHISLO_INT*92)>>7):\
(((CONST_FLOAT+(1.0/256))<(94.0/128))?((CHISLO_INT*93)>>7):\
(((CONST_FLOAT+(1.0/256))<(95.0/128))?((CHISLO_INT*94)>>7):\
(((CONST_FLOAT+(1.0/256))<(96.0/128))?((CHISLO_INT*95)>>7):\
(((CONST_FLOAT+(1.0/256))<(97.0/128))?((CHISLO_INT*96)>>7):\
(((CONST_FLOAT+(1.0/256))<(98.0/128))?((CHISLO_INT*97)>>7):\
(((CONST_FLOAT+(1.0/256))<(99.0/128))?((CHISLO_INT*98)>>7):\
(((CONST_FLOAT+(1.0/256))<(100.0/128))?((CHISLO_INT*99)>>7):\
(((CONST_FLOAT+(1.0/256))<(101.0/128))?((CHISLO_INT*100)>>7):\
(((CONST_FLOAT+(1.0/256))<(102.0/128))?((CHISLO_INT*101)>>7):\
(((CONST_FLOAT+(1.0/256))<(103.0/128))?((CHISLO_INT*102)>>7):\
(((CONST_FLOAT+(1.0/256))<(104.0/128))?((CHISLO_INT*103)>>7):\
(((CONST_FLOAT+(1.0/256))<(105.0/128))?((CHISLO_INT*104)>>7):\
(((CONST_FLOAT+(1.0/256))<(106.0/128))?((CHISLO_INT*105)>>7):\
(((CONST_FLOAT+(1.0/256))<(107.0/128))?((CHISLO_INT*106)>>7):\
(((CONST_FLOAT+(1.0/256))<(108.0/128))?((CHISLO_INT*107)>>7):\
(((CONST_FLOAT+(1.0/256))<(109.0/128))?((CHISLO_INT*108)>>7):\
(((CONST_FLOAT+(1.0/256))<(110.0/128))?((CHISLO_INT*109)>>7):\
(((CONST_FLOAT+(1.0/256))<(111.0/128))?((CHISLO_INT*110)>>7):\
(((CONST_FLOAT+(1.0/256))<(112.0/128))?((CHISLO_INT*111)>>7):\
(((CONST_FLOAT+(1.0/256))<(113.0/128))?((CHISLO_INT*112)>>7):\
(((CONST_FLOAT+(1.0/256))<(114.0/128))?((CHISLO_INT*113)>>7):\
(((CONST_FLOAT+(1.0/256))<(115.0/128))?((CHISLO_INT*114)>>7):\
(((CONST_FLOAT+(1.0/256))<(116.0/128))?((CHISLO_INT*115)>>7):\
(((CONST_FLOAT+(1.0/256))<(117.0/128))?((CHISLO_INT*116)>>7):\
(((CONST_FLOAT+(1.0/256))<(118.0/128))?((CHISLO_INT*117)>>7):\
(((CONST_FLOAT+(1.0/256))<(119.0/128))?((CHISLO_INT*118)>>7):\
(((CONST_FLOAT+(1.0/256))<(120.0/128))?((CHISLO_INT*119)>>7):\
(((CONST_FLOAT+(1.0/256))<(121.0/128))?((CHISLO_INT*120)>>7):\
(((CONST_FLOAT+(1.0/256))<(122.0/128))?((CHISLO_INT*121)>>7):\
(((CONST_FLOAT+(1.0/256))<(123.0/128))?((CHISLO_INT*122)>>7):\
(((CONST_FLOAT+(1.0/256))<(124.0/128))?((CHISLO_INT*123)>>7):\
(((CONST_FLOAT+(1.0/256))<(125.0/128))?((CHISLO_INT*124)>>7):\
(((CONST_FLOAT+(1.0/256))<(126.0/128))?((CHISLO_INT*125)>>7):\
(((CONST_FLOAT+(1.0/256))<(127.0/128))?((CHISLO_INT*126)>>7):\
(((CONST_FLOAT+(1.0/256))<(128.0/128))?((CHISLO_INT*127)>>7):\
(CHISLO_INT)\
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\
)))))))))))))))))))))))))))))))))))))))))))))))))
//константа кратная 1/256
#define UM256(CONST_FLOAT,CHISLO_INT) \
((CONST_FLOAT+(1.0/512))<(1.0/256))?((CHISLO_INT*0)>>8):\
(((CONST_FLOAT+(1.0/512))<(2.0/256))?((CHISLO_INT*1)>>8):\
(((CONST_FLOAT+(1.0/512))<(3.0/256))?((CHISLO_INT*2)>>8):\
(((CONST_FLOAT+(1.0/512))<(4.0/256))?((CHISLO_INT*3)>>8):\
(((CONST_FLOAT+(1.0/512))<(5.0/256))?((CHISLO_INT*4)>>8):\
(((CONST_FLOAT+(1.0/512))<(6.0/256))?((CHISLO_INT*5)>>8):\
(((CONST_FLOAT+(1.0/512))<(7.0/256))?((CHISLO_INT*6)>>8):\
(((CONST_FLOAT+(1.0/512))<(8.0/256))?((CHISLO_INT*7)>>8):\
(((CONST_FLOAT+(1.0/512))<(9.0/256))?((CHISLO_INT*8)>>8):\
(((CONST_FLOAT+(1.0/512))<(10.0/256))?((CHISLO_INT*9)>>8):\
(((CONST_FLOAT+(1.0/512))<(11.0/256))?((CHISLO_INT*10)>>8):\
(((CONST_FLOAT+(1.0/512))<(12.0/256))?((CHISLO_INT*11)>>8):\
(((CONST_FLOAT+(1.0/512))<(13.0/256))?((CHISLO_INT*12)>>8):\
(((CONST_FLOAT+(1.0/512))<(14.0/256))?((CHISLO_INT*13)>>8):\
(((CONST_FLOAT+(1.0/512))<(15.0/256))?((CHISLO_INT*14)>>8):\
(((CONST_FLOAT+(1.0/512))<(16.0/256))?((CHISLO_INT*15)>>8):\
(((CONST_FLOAT+(1.0/512))<(17.0/256))?((CHISLO_INT*16)>>8):\
(((CONST_FLOAT+(1.0/512))<(18.0/256))?((CHISLO_INT*17)>>8):\
(((CONST_FLOAT+(1.0/512))<(19.0/256))?((CHISLO_INT*18)>>8):\
(((CONST_FLOAT+(1.0/512))<(20.0/256))?((CHISLO_INT*19)>>8):\
(((CONST_FLOAT+(1.0/512))<(21.0/256))?((CHISLO_INT*20)>>8):\
(((CONST_FLOAT+(1.0/512))<(22.0/256))?((CHISLO_INT*21)>>8):\
(((CONST_FLOAT+(1.0/512))<(23.0/256))?((CHISLO_INT*22)>>8):\
(((CONST_FLOAT+(1.0/512))<(24.0/256))?((CHISLO_INT*23)>>8):\
(((CONST_FLOAT+(1.0/512))<(25.0/256))?((CHISLO_INT*24)>>8):\
(((CONST_FLOAT+(1.0/512))<(26.0/256))?((CHISLO_INT*25)>>8):\
(((CONST_FLOAT+(1.0/512))<(27.0/256))?((CHISLO_INT*26)>>8):\
(((CONST_FLOAT+(1.0/512))<(28.0/256))?((CHISLO_INT*27)>>8):\
(((CONST_FLOAT+(1.0/512))<(29.0/256))?((CHISLO_INT*28)>>8):\
(((CONST_FLOAT+(1.0/512))<(30.0/256))?((CHISLO_INT*29)>>8):\
(((CONST_FLOAT+(1.0/512))<(31.0/256))?((CHISLO_INT*30)>>8):\
(((CONST_FLOAT+(1.0/512))<(32.0/256))?((CHISLO_INT*31)>>8):\
(((CONST_FLOAT+(1.0/512))<(33.0/256))?((CHISLO_INT*32)>>8):\
(((CONST_FLOAT+(1.0/512))<(34.0/256))?((CHISLO_INT*33)>>8):\
(((CONST_FLOAT+(1.0/512))<(35.0/256))?((CHISLO_INT*34)>>8):\
(((CONST_FLOAT+(1.0/512))<(36.0/256))?((CHISLO_INT*35)>>8):\
(((CONST_FLOAT+(1.0/512))<(37.0/256))?((CHISLO_INT*36)>>8):\
(((CONST_FLOAT+(1.0/512))<(38.0/256))?((CHISLO_INT*37)>>8):\
(((CONST_FLOAT+(1.0/512))<(39.0/256))?((CHISLO_INT*38)>>8):\
(((CONST_FLOAT+(1.0/512))<(40.0/256))?((CHISLO_INT*39)>>8):\
(((CONST_FLOAT+(1.0/512))<(41.0/256))?((CHISLO_INT*40)>>8):\
(((CONST_FLOAT+(1.0/512))<(42.0/256))?((CHISLO_INT*41)>>8):\
(((CONST_FLOAT+(1.0/512))<(43.0/256))?((CHISLO_INT*42)>>8):\
(((CONST_FLOAT+(1.0/512))<(44.0/256))?((CHISLO_INT*43)>>8):\
(((CONST_FLOAT+(1.0/512))<(45.0/256))?((CHISLO_INT*44)>>8):\
(((CONST_FLOAT+(1.0/512))<(46.0/256))?((CHISLO_INT*45)>>8):\
(((CONST_FLOAT+(1.0/512))<(47.0/256))?((CHISLO_INT*46)>>8):\
(((CONST_FLOAT+(1.0/512))<(48.0/256))?((CHISLO_INT*47)>>8):\
(((CONST_FLOAT+(1.0/512))<(49.0/256))?((CHISLO_INT*48)>>8):\
(((CONST_FLOAT+(1.0/512))<(50.0/256))?((CHISLO_INT*49)>>8):\
(((CONST_FLOAT+(1.0/512))<(51.0/256))?((CHISLO_INT*50)>>8):\
(((CONST_FLOAT+(1.0/512))<(52.0/256))?((CHISLO_INT*51)>>8):\
(((CONST_FLOAT+(1.0/512))<(53.0/256))?((CHISLO_INT*52)>>8):\
(((CONST_FLOAT+(1.0/512))<(54.0/256))?((CHISLO_INT*53)>>8):\
(((CONST_FLOAT+(1.0/512))<(55.0/256))?((CHISLO_INT*54)>>8):\
(((CONST_FLOAT+(1.0/512))<(56.0/256))?((CHISLO_INT*55)>>8):\
(((CONST_FLOAT+(1.0/512))<(57.0/256))?((CHISLO_INT*56)>>8):\
(((CONST_FLOAT+(1.0/512))<(58.0/256))?((CHISLO_INT*57)>>8):\
(((CONST_FLOAT+(1.0/512))<(59.0/256))?((CHISLO_INT*58)>>8):\
(((CONST_FLOAT+(1.0/512))<(60.0/256))?((CHISLO_INT*59)>>8):\
(((CONST_FLOAT+(1.0/512))<(61.0/256))?((CHISLO_INT*60)>>8):\
(((CONST_FLOAT+(1.0/512))<(62.0/256))?((CHISLO_INT*61)>>8):\
(((CONST_FLOAT+(1.0/512))<(63.0/256))?((CHISLO_INT*62)>>8):\
(((CONST_FLOAT+(1.0/512))<(64.0/256))?((CHISLO_INT*63)>>8):\
(((CONST_FLOAT+(1.0/512))<(65.0/256))?((CHISLO_INT*64)>>8):\
(((CONST_FLOAT+(1.0/512))<(66.0/256))?((CHISLO_INT*65)>>8):\
(((CONST_FLOAT+(1.0/512))<(67.0/256))?((CHISLO_INT*66)>>8):\
(((CONST_FLOAT+(1.0/512))<(68.0/256))?((CHISLO_INT*67)>>8):\
(((CONST_FLOAT+(1.0/512))<(69.0/256))?((CHISLO_INT*68)>>8):\
(((CONST_FLOAT+(1.0/512))<(70.0/256))?((CHISLO_INT*69)>>8):\
(((CONST_FLOAT+(1.0/512))<(71.0/256))?((CHISLO_INT*70)>>8):\
(((CONST_FLOAT+(1.0/512))<(72.0/256))?((CHISLO_INT*71)>>8):\
(((CONST_FLOAT+(1.0/512))<(73.0/256))?((CHISLO_INT*72)>>8):\
(((CONST_FLOAT+(1.0/512))<(74.0/256))?((CHISLO_INT*73)>>8):\
(((CONST_FLOAT+(1.0/512))<(75.0/256))?((CHISLO_INT*74)>>8):\
(((CONST_FLOAT+(1.0/512))<(76.0/256))?((CHISLO_INT*75)>>8):\
(((CONST_FLOAT+(1.0/512))<(77.0/256))?((CHISLO_INT*76)>>8):\
(((CONST_FLOAT+(1.0/512))<(78.0/256))?((CHISLO_INT*77)>>8):\
(((CONST_FLOAT+(1.0/512))<(79.0/256))?((CHISLO_INT*78)>>8):\
(((CONST_FLOAT+(1.0/512))<(80.0/256))?((CHISLO_INT*79)>>8):\
(((CONST_FLOAT+(1.0/512))<(81.0/256))?((CHISLO_INT*80)>>8):\
(((CONST_FLOAT+(1.0/512))<(82.0/256))?((CHISLO_INT*81)>>8):\
(((CONST_FLOAT+(1.0/512))<(83.0/256))?((CHISLO_INT*82)>>8):\
(((CONST_FLOAT+(1.0/512))<(84.0/256))?((CHISLO_INT*83)>>8):\
(((CONST_FLOAT+(1.0/512))<(85.0/256))?((CHISLO_INT*84)>>8):\
(((CONST_FLOAT+(1.0/512))<(86.0/256))?((CHISLO_INT*85)>>8):\
(((CONST_FLOAT+(1.0/512))<(87.0/256))?((CHISLO_INT*86)>>8):\
(((CONST_FLOAT+(1.0/512))<(88.0/256))?((CHISLO_INT*87)>>8):\
(((CONST_FLOAT+(1.0/512))<(89.0/256))?((CHISLO_INT*88)>>8):\
(((CONST_FLOAT+(1.0/512))<(90.0/256))?((CHISLO_INT*89)>>8):\
(((CONST_FLOAT+(1.0/512))<(91.0/256))?((CHISLO_INT*90)>>8):\
(((CONST_FLOAT+(1.0/512))<(92.0/256))?((CHISLO_INT*91)>>8):\
(((CONST_FLOAT+(1.0/512))<(93.0/256))?((CHISLO_INT*92)>>8):\
(((CONST_FLOAT+(1.0/512))<(94.0/256))?((CHISLO_INT*93)>>8):\
(((CONST_FLOAT+(1.0/512))<(95.0/256))?((CHISLO_INT*94)>>8):\
(((CONST_FLOAT+(1.0/512))<(96.0/256))?((CHISLO_INT*95)>>8):\
(((CONST_FLOAT+(1.0/512))<(97.0/256))?((CHISLO_INT*96)>>8):\
(((CONST_FLOAT+(1.0/512))<(98.0/256))?((CHISLO_INT*97)>>8):\
(((CONST_FLOAT+(1.0/512))<(99.0/256))?((CHISLO_INT*98)>>8):\
(((CONST_FLOAT+(1.0/512))<(100.0/256))?((CHISLO_INT*99)>>8):\
(((CONST_FLOAT+(1.0/512))<(101.0/256))?((CHISLO_INT*100)>>8):\
(((CONST_FLOAT+(1.0/512))<(102.0/256))?((CHISLO_INT*101)>>8):\
(((CONST_FLOAT+(1.0/512))<(103.0/256))?((CHISLO_INT*102)>>8):\
(((CONST_FLOAT+(1.0/512))<(104.0/256))?((CHISLO_INT*103)>>8):\
(((CONST_FLOAT+(1.0/512))<(105.0/256))?((CHISLO_INT*104)>>8):\
(((CONST_FLOAT+(1.0/512))<(106.0/256))?((CHISLO_INT*105)>>8):\
(((CONST_FLOAT+(1.0/512))<(107.0/256))?((CHISLO_INT*106)>>8):\
(((CONST_FLOAT+(1.0/512))<(108.0/256))?((CHISLO_INT*107)>>8):\
(((CONST_FLOAT+(1.0/512))<(109.0/256))?((CHISLO_INT*108)>>8):\
(((CONST_FLOAT+(1.0/512))<(110.0/256))?((CHISLO_INT*109)>>8):\
(((CONST_FLOAT+(1.0/512))<(111.0/256))?((CHISLO_INT*110)>>8):\
(((CONST_FLOAT+(1.0/512))<(112.0/256))?((CHISLO_INT*111)>>8):\
(((CONST_FLOAT+(1.0/512))<(113.0/256))?((CHISLO_INT*112)>>8):\
(((CONST_FLOAT+(1.0/512))<(114.0/256))?((CHISLO_INT*113)>>8):\
(((CONST_FLOAT+(1.0/512))<(115.0/256))?((CHISLO_INT*114)>>8):\
(((CONST_FLOAT+(1.0/512))<(116.0/256))?((CHISLO_INT*115)>>8):\
(((CONST_FLOAT+(1.0/512))<(117.0/256))?((CHISLO_INT*116)>>8):\
(((CONST_FLOAT+(1.0/512))<(118.0/256))?((CHISLO_INT*117)>>8):\
(((CONST_FLOAT+(1.0/512))<(119.0/256))?((CHISLO_INT*118)>>8):\
(((CONST_FLOAT+(1.0/512))<(120.0/256))?((CHISLO_INT*119)>>8):\
(((CONST_FLOAT+(1.0/512))<(121.0/256))?((CHISLO_INT*120)>>8):\
(((CONST_FLOAT+(1.0/512))<(122.0/256))?((CHISLO_INT*121)>>8):\
(((CONST_FLOAT+(1.0/512))<(123.0/256))?((CHISLO_INT*122)>>8):\
(((CONST_FLOAT+(1.0/512))<(124.0/256))?((CHISLO_INT*123)>>8):\
(((CONST_FLOAT+(1.0/512))<(125.0/256))?((CHISLO_INT*124)>>8):\
(((CONST_FLOAT+(1.0/512))<(126.0/256))?((CHISLO_INT*125)>>8):\
(((CONST_FLOAT+(1.0/512))<(127.0/256))?((CHISLO_INT*126)>>8):\
(((CONST_FLOAT+(1.0/512))<(128.0/256))?((CHISLO_INT*127)>>8):\
(((CONST_FLOAT+(1.0/512))<(129.0/256))?((CHISLO_INT*128)>>8):\
(((CONST_FLOAT+(1.0/512))<(130.0/256))?((CHISLO_INT*129)>>8):\
(((CONST_FLOAT+(1.0/512))<(131.0/256))?((CHISLO_INT*130)>>8):\
(((CONST_FLOAT+(1.0/512))<(132.0/256))?((CHISLO_INT*131)>>8):\
(((CONST_FLOAT+(1.0/512))<(133.0/256))?((CHISLO_INT*132)>>8):\
(((CONST_FLOAT+(1.0/512))<(134.0/256))?((CHISLO_INT*133)>>8):\
(((CONST_FLOAT+(1.0/512))<(135.0/256))?((CHISLO_INT*134)>>8):\
(((CONST_FLOAT+(1.0/512))<(136.0/256))?((CHISLO_INT*135)>>8):\
(((CONST_FLOAT+(1.0/512))<(137.0/256))?((CHISLO_INT*136)>>8):\
(((CONST_FLOAT+(1.0/512))<(138.0/256))?((CHISLO_INT*137)>>8):\
(((CONST_FLOAT+(1.0/512))<(139.0/256))?((CHISLO_INT*138)>>8):\
(((CONST_FLOAT+(1.0/512))<(140.0/256))?((CHISLO_INT*139)>>8):\
(((CONST_FLOAT+(1.0/512))<(141.0/256))?((CHISLO_INT*140)>>8):\
(((CONST_FLOAT+(1.0/512))<(142.0/256))?((CHISLO_INT*141)>>8):\
(((CONST_FLOAT+(1.0/512))<(143.0/256))?((CHISLO_INT*142)>>8):\
(((CONST_FLOAT+(1.0/512))<(144.0/256))?((CHISLO_INT*143)>>8):\
(((CONST_FLOAT+(1.0/512))<(145.0/256))?((CHISLO_INT*144)>>8):\
(((CONST_FLOAT+(1.0/512))<(146.0/256))?((CHISLO_INT*145)>>8):\
(((CONST_FLOAT+(1.0/512))<(147.0/256))?((CHISLO_INT*146)>>8):\
(((CONST_FLOAT+(1.0/512))<(148.0/256))?((CHISLO_INT*147)>>8):\
(((CONST_FLOAT+(1.0/512))<(149.0/256))?((CHISLO_INT*148)>>8):\
(((CONST_FLOAT+(1.0/512))<(150.0/256))?((CHISLO_INT*149)>>8):\
(((CONST_FLOAT+(1.0/512))<(151.0/256))?((CHISLO_INT*150)>>8):\
(((CONST_FLOAT+(1.0/512))<(152.0/256))?((CHISLO_INT*151)>>8):\
(((CONST_FLOAT+(1.0/512))<(153.0/256))?((CHISLO_INT*152)>>8):\
(((CONST_FLOAT+(1.0/512))<(154.0/256))?((CHISLO_INT*153)>>8):\
(((CONST_FLOAT+(1.0/512))<(155.0/256))?((CHISLO_INT*154)>>8):\
(((CONST_FLOAT+(1.0/512))<(156.0/256))?((CHISLO_INT*155)>>8):\
(((CONST_FLOAT+(1.0/512))<(157.0/256))?((CHISLO_INT*156)>>8):\
(((CONST_FLOAT+(1.0/512))<(158.0/256))?((CHISLO_INT*157)>>8):\
(((CONST_FLOAT+(1.0/512))<(159.0/256))?((CHISLO_INT*158)>>8):\
(((CONST_FLOAT+(1.0/512))<(160.0/256))?((CHISLO_INT*159)>>8):\
(((CONST_FLOAT+(1.0/512))<(161.0/256))?((CHISLO_INT*160)>>8):\
(((CONST_FLOAT+(1.0/512))<(162.0/256))?((CHISLO_INT*161)>>8):\
(((CONST_FLOAT+(1.0/512))<(163.0/256))?((CHISLO_INT*162)>>8):\
(((CONST_FLOAT+(1.0/512))<(164.0/256))?((CHISLO_INT*163)>>8):\
(((CONST_FLOAT+(1.0/512))<(165.0/256))?((CHISLO_INT*164)>>8):\
(((CONST_FLOAT+(1.0/512))<(166.0/256))?((CHISLO_INT*165)>>8):\
(((CONST_FLOAT+(1.0/512))<(167.0/256))?((CHISLO_INT*166)>>8):\
(((CONST_FLOAT+(1.0/512))<(168.0/256))?((CHISLO_INT*167)>>8):\
(((CONST_FLOAT+(1.0/512))<(169.0/256))?((CHISLO_INT*168)>>8):\
(((CONST_FLOAT+(1.0/512))<(170.0/256))?((CHISLO_INT*169)>>8):\
(((CONST_FLOAT+(1.0/512))<(171.0/256))?((CHISLO_INT*170)>>8):\
(((CONST_FLOAT+(1.0/512))<(172.0/256))?((CHISLO_INT*171)>>8):\
(((CONST_FLOAT+(1.0/512))<(173.0/256))?((CHISLO_INT*172)>>8):\
(((CONST_FLOAT+(1.0/512))<(174.0/256))?((CHISLO_INT*173)>>8):\
(((CONST_FLOAT+(1.0/512))<(175.0/256))?((CHISLO_INT*174)>>8):\
(((CONST_FLOAT+(1.0/512))<(176.0/256))?((CHISLO_INT*175)>>8):\
(((CONST_FLOAT+(1.0/512))<(177.0/256))?((CHISLO_INT*176)>>8):\
(((CONST_FLOAT+(1.0/512))<(178.0/256))?((CHISLO_INT*177)>>8):\
(((CONST_FLOAT+(1.0/512))<(179.0/256))?((CHISLO_INT*178)>>8):\
(((CONST_FLOAT+(1.0/512))<(180.0/256))?((CHISLO_INT*179)>>8):\
(((CONST_FLOAT+(1.0/512))<(181.0/256))?((CHISLO_INT*180)>>8):\
(((CONST_FLOAT+(1.0/512))<(182.0/256))?((CHISLO_INT*181)>>8):\
(((CONST_FLOAT+(1.0/512))<(183.0/256))?((CHISLO_INT*182)>>8):\
(((CONST_FLOAT+(1.0/512))<(184.0/256))?((CHISLO_INT*183)>>8):\
(((CONST_FLOAT+(1.0/512))<(185.0/256))?((CHISLO_INT*184)>>8):\
(((CONST_FLOAT+(1.0/512))<(186.0/256))?((CHISLO_INT*185)>>8):\
(((CONST_FLOAT+(1.0/512))<(187.0/256))?((CHISLO_INT*186)>>8):\
(((CONST_FLOAT+(1.0/512))<(188.0/256))?((CHISLO_INT*187)>>8):\
(((CONST_FLOAT+(1.0/512))<(189.0/256))?((CHISLO_INT*188)>>8):\
(((CONST_FLOAT+(1.0/512))<(190.0/256))?((CHISLO_INT*189)>>8):\
(((CONST_FLOAT+(1.0/512))<(191.0/256))?((CHISLO_INT*190)>>8):\
(((CONST_FLOAT+(1.0/512))<(192.0/256))?((CHISLO_INT*191)>>8):\
(((CONST_FLOAT+(1.0/512))<(193.0/256))?((CHISLO_INT*192)>>8):\
(((CONST_FLOAT+(1.0/512))<(194.0/256))?((CHISLO_INT*193)>>8):\
(((CONST_FLOAT+(1.0/512))<(195.0/256))?((CHISLO_INT*194)>>8):\
(((CONST_FLOAT+(1.0/512))<(196.0/256))?((CHISLO_INT*195)>>8):\
(((CONST_FLOAT+(1.0/512))<(197.0/256))?((CHISLO_INT*196)>>8):\
(((CONST_FLOAT+(1.0/512))<(198.0/256))?((CHISLO_INT*197)>>8):\
(((CONST_FLOAT+(1.0/512))<(199.0/256))?((CHISLO_INT*198)>>8):\
(((CONST_FLOAT+(1.0/512))<(200.0/256))?((CHISLO_INT*199)>>8):\
(((CONST_FLOAT+(1.0/512))<(201.0/256))?((CHISLO_INT*200)>>8):\
(((CONST_FLOAT+(1.0/512))<(202.0/256))?((CHISLO_INT*201)>>8):\
(((CONST_FLOAT+(1.0/512))<(203.0/256))?((CHISLO_INT*202)>>8):\
(((CONST_FLOAT+(1.0/512))<(204.0/256))?((CHISLO_INT*203)>>8):\
(((CONST_FLOAT+(1.0/512))<(205.0/256))?((CHISLO_INT*204)>>8):\
(((CONST_FLOAT+(1.0/512))<(206.0/256))?((CHISLO_INT*205)>>8):\
(((CONST_FLOAT+(1.0/512))<(207.0/256))?((CHISLO_INT*206)>>8):\
(((CONST_FLOAT+(1.0/512))<(208.0/256))?((CHISLO_INT*207)>>8):\
(((CONST_FLOAT+(1.0/512))<(209.0/256))?((CHISLO_INT*208)>>8):\
(((CONST_FLOAT+(1.0/512))<(210.0/256))?((CHISLO_INT*209)>>8):\
(((CONST_FLOAT+(1.0/512))<(211.0/256))?((CHISLO_INT*210)>>8):\
(((CONST_FLOAT+(1.0/512))<(212.0/256))?((CHISLO_INT*211)>>8):\
(((CONST_FLOAT+(1.0/512))<(213.0/256))?((CHISLO_INT*212)>>8):\
(((CONST_FLOAT+(1.0/512))<(214.0/256))?((CHISLO_INT*213)>>8):\
(((CONST_FLOAT+(1.0/512))<(215.0/256))?((CHISLO_INT*214)>>8):\
(((CONST_FLOAT+(1.0/512))<(216.0/256))?((CHISLO_INT*215)>>8):\
(((CONST_FLOAT+(1.0/512))<(217.0/256))?((CHISLO_INT*216)>>8):\
(((CONST_FLOAT+(1.0/512))<(218.0/256))?((CHISLO_INT*217)>>8):\
(((CONST_FLOAT+(1.0/512))<(219.0/256))?((CHISLO_INT*218)>>8):\
(((CONST_FLOAT+(1.0/512))<(220.0/256))?((CHISLO_INT*219)>>8):\
(((CONST_FLOAT+(1.0/512))<(221.0/256))?((CHISLO_INT*220)>>8):\
(((CONST_FLOAT+(1.0/512))<(222.0/256))?((CHISLO_INT*221)>>8):\
(((CONST_FLOAT+(1.0/512))<(223.0/256))?((CHISLO_INT*222)>>8):\
(((CONST_FLOAT+(1.0/512))<(224.0/256))?((CHISLO_INT*223)>>8):\
(((CONST_FLOAT+(1.0/512))<(225.0/256))?((CHISLO_INT*224)>>8):\
(((CONST_FLOAT+(1.0/512))<(226.0/256))?((CHISLO_INT*225)>>8):\
(((CONST_FLOAT+(1.0/512))<(227.0/256))?((CHISLO_INT*226)>>8):\
(((CONST_FLOAT+(1.0/512))<(228.0/256))?((CHISLO_INT*227)>>8):\
(((CONST_FLOAT+(1.0/512))<(229.0/256))?((CHISLO_INT*228)>>8):\
(((CONST_FLOAT+(1.0/512))<(230.0/256))?((CHISLO_INT*229)>>8):\
(((CONST_FLOAT+(1.0/512))<(231.0/256))?((CHISLO_INT*230)>>8):\
(((CONST_FLOAT+(1.0/512))<(232.0/256))?((CHISLO_INT*231)>>8):\
(((CONST_FLOAT+(1.0/512))<(233.0/256))?((CHISLO_INT*232)>>8):\
(((CONST_FLOAT+(1.0/512))<(234.0/256))?((CHISLO_INT*233)>>8):\
(((CONST_FLOAT+(1.0/512))<(235.0/256))?((CHISLO_INT*234)>>8):\
(((CONST_FLOAT+(1.0/512))<(236.0/256))?((CHISLO_INT*235)>>8):\
(((CONST_FLOAT+(1.0/512))<(237.0/256))?((CHISLO_INT*236)>>8):\
(((CONST_FLOAT+(1.0/512))<(238.0/256))?((CHISLO_INT*237)>>8):\
(((CONST_FLOAT+(1.0/512))<(239.0/256))?((CHISLO_INT*238)>>8):\
(((CONST_FLOAT+(1.0/512))<(240.0/256))?((CHISLO_INT*239)>>8):\
(((CONST_FLOAT+(1.0/512))<(241.0/256))?((CHISLO_INT*240)>>8):\
(((CONST_FLOAT+(1.0/512))<(242.0/256))?((CHISLO_INT*241)>>8):\
(((CONST_FLOAT+(1.0/512))<(243.0/256))?((CHISLO_INT*242)>>8):\
(((CONST_FLOAT+(1.0/512))<(244.0/256))?((CHISLO_INT*243)>>8):\
(((CONST_FLOAT+(1.0/512))<(245.0/256))?((CHISLO_INT*244)>>8):\
(((CONST_FLOAT+(1.0/512))<(246.0/256))?((CHISLO_INT*245)>>8):\
(((CONST_FLOAT+(1.0/512))<(247.0/256))?((CHISLO_INT*246)>>8):\
(((CONST_FLOAT+(1.0/512))<(248.0/256))?((CHISLO_INT*247)>>8):\
(((CONST_FLOAT+(1.0/512))<(249.0/256))?((CHISLO_INT*248)>>8):\
(((CONST_FLOAT+(1.0/512))<(250.0/256))?((CHISLO_INT*249)>>8):\
(((CONST_FLOAT+(1.0/512))<(251.0/256))?((CHISLO_INT*250)>>8):\
(((CONST_FLOAT+(1.0/512))<(252.0/256))?((CHISLO_INT*251)>>8):\
(((CONST_FLOAT+(1.0/512))<(253.0/256))?((CHISLO_INT*252)>>8):\
(((CONST_FLOAT+(1.0/512))<(254.0/256))?((CHISLO_INT*253)>>8):\
(((CONST_FLOAT+(1.0/512))<(255.0/256))?((CHISLO_INT*254)>>8):\
(((CONST_FLOAT+(1.0/512))<(256.0/256))?((CHISLO_INT*255)>>8):\
(CHISLO_INT)\
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\
)))))))))))))))))))))))))))))))))))))))))))))))))\
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\
)))))))))))))))))))))))))))))))))))))))))))))))))
#endif // __UM_H
Теперь для умножения переменной «а» на 0.4, с точностью до 1/256 достаточно написать «UM256(0.4, а)». И пускай за вас думает компилятор, у него мозгов много! При компиляции эти много букв макроса соберутся в простое выражение "(а*102)>>8", которое на большинстве процессоров компилируется в три команды.
Быстрого кода вам, коллеги!
https://habrahabr.ru/post/334758/
Метки:
author IBAH_II
программирование микроконтроллеров
высокая производительность
макросы
константы
целочисленная арифметика
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-