-
- а куда их еще пихать прямо в код? квалификатор const в "моем" компиляторе не позволяет просто сделать подстановку константы, а помещает константу в кодовую память и потом вычитывает ее. а вот в препроцессорных условиях(#if) плавучка не работает, abivan(8 знак., 11.06.2013 08:53)
- Главное не забыть привести к целым, иначе при использовании таких констант в выражениях появятся run-time флоаты. - Лeoнид Ивaнoвич(10.06.2013 22:21)
- Почему2? Я наоборот, предпочитаю плавучку в дефайнах, чтобы не нарываться на всякие переполнения внутри расчетов: компилер дает предупреждение при этом, но время уходит. - Andreas(10.06.2013 18:35)
- Переполнение - это фигня. Как Вы заметили, предупредит. Хуже округление после деления и надо следить, чтобы не отбросилось чего нибудь нужное. - mr-x(11.06.2013 10:03)
- Пока не нарывался. Обычно(у меня) +-1 непринципиально. - Andreas(11.06.2013 10:41)
- Переполнение - это фигня. Как Вы заметили, предупредит. Хуже округление после деления и надо следить, чтобы не отбросилось чего нибудь нужное. - mr-x(11.06.2013 10:03)
- Пачиму? Применительно к дефайнам. - mr-x(10.06.2013 16:02)
- Потому, что препроцессор с компилятором оптимизируют/выполняет только целочисленные вычисления и ничего знать не знают про плЫвучку. - rezident(10.06.2013 16:22)
- А кто вам это сказал? Про "плавучку" компилятор как раз Bill(76 знак., 10.06.2013 18:43)
- А как оно работает? Ведь оно же работает. - mr-x(10.06.2013 16:35)
- Ага, и работает сильно по-разному и не показывает, что работает неправильно... KEIL небось, потому и не заметно (там float работает). - fk0(10.06.2013 18:25)
- Что не работает или работает неправильно - это точно, или предположение? С микрочиповскими компиллерами всегда работало. С CCS 3 и 4 тоже проблем не было. Про остальные не скажу. - mr-x(10.06.2013 19:42)
- Гоню... Всё работает, но. Округлять могут по-разному. Кто-то через round(), кто-то через floor(). Первое замечено для KEIL C51, вроде как через floor() правильно (так все делают). - fk0(10.06.2013 20:15)
- Минус, наверное, в том, что попадись такая "константа" в выражении -- оно всё double станет со всеми вытекающими. И не заметишь. Либо надо (int) писать везде. - fk0(10.06.2013 20:16)
- (int) обязательно. Я всегда был уверен, что приведение к целому отбрасывает дробную часть, поэтому для правильного округления к выражению выше в конце добавлено +0.5. mr-x(159 знак., 10.06.2013 20:30)
- Хм... а я вместо int пишу Bill(43 знак., 11.06.2013 09:03)
- Я тоже что попало пишу в зависимости от контекста. Под (int) подразумевалось явное приведение типа. - mr-x(11.06.2013 10:06)
- Для положительных чисел +0.5, для отрицательных -0.5. - Лeoнид Ивaнoвич(10.06.2013 22:17)
- Хм... а я вместо int пишу Bill(43 знак., 11.06.2013 09:03)
- (int) обязательно. Я всегда был уверен, что приведение к целому отбрасывает дробную часть, поэтому для правильного округления к выражению выше в конце добавлено +0.5. mr-x(159 знак., 10.06.2013 20:30)
- Минус, наверное, в том, что попадись такая "константа" в выражении -- оно всё double станет со всеми вытекающими. И не заметишь. Либо надо (int) писать везде. - fk0(10.06.2013 20:16)
- Гоню... Всё работает, но. Округлять могут по-разному. Кто-то через round(), кто-то через floor(). Первое замечено для KEIL C51, вроде как через floor() правильно (так все делают). - fk0(10.06.2013 20:15)
- Что не работает или работает неправильно - это точно, или предположение? С микрочиповскими компиллерами всегда работало. С CCS 3 и 4 тоже проблем не было. Про остальные не скажу. - mr-x(10.06.2013 19:42)
- Скомпилируйте и посмотрите: константа там в этом месте программы или блок вычислений с вызовом библиотечной функции? - rezident(10.06.2013 18:23)
- Константа, конечно. Всегда была. Но Вы меня смутили и я перепроверил. - mr-x(10.06.2013 19:05)
- Ага, и работает сильно по-разному и не показывает, что работает неправильно... KEIL небось, потому и не заметно (там float работает). - fk0(10.06.2013 18:25)
- Потому, что препроцессор с компилятором оптимизируют/выполняет только целочисленные вычисления и ничего знать не знают про плЫвучку. - rezident(10.06.2013 16:22)