-
- Не будет. Вот: SciFi(1 знак., Сегодня, 19:05, картинка)
- Это фича свежего GCC. Вот IAR во всех вариантах: видно что первые 2
- целиком в FPU, вторые - процессорные, во много раз дольше. Idler(2117 знак., Сегодня, 19:30)
- У вас там ошибка: 0.001 вместо 0.001f. Дело не в Яре и не в GCC. - SciFi(Сегодня, 19:31)
- Достаточно добавить ключик "-fsingle-precision-constant", чтобы не
париться насчет того, что флоаты могут быть рассмотрены как double! - Eddy_Em(Сегодня, 19:54)
- Куда добавить? Это не GCC, у IARа никаких "ключиков" нет, есть
менюшки с настройками, из которых он сам генерит опции компилятора.
И теоретически, при определённом в настройках FPU "одинарной"
точности (поубивал бы переводчиков, нет такого слова, есть
"одиночной" и "оРдинарной" = "обычной"), мог бы выдавать
компилятору этот "ключик"... - Idler(Сегодня, 20:10)
- Намекаю, что пора бы на линукс перейти ☺ - Eddy_Em(Сегодня, 20:35)
- Куда добавить? Это не GCC, у IARа никаких "ключиков" нет, есть
менюшки с настройками, из которых он сам генерит опции компилятора.
И теоретически, при определённом в настройках FPU "одинарной"
точности (поубивал бы переводчиков, нет такого слова, есть
"одиночной" и "оРдинарной" = "обычной"), мог бы выдавать
компилятору этот "ключик"... - Idler(Сегодня, 20:10)
- Вы чем смотрите? Я же сказал, все 4 варианта, то есть и с 'f', и
без, и с (float) и без. Вариант 2 (с 'f' и float, но с делением
вместо умножения) - мой изначальный, выполняется столько же,
сколько "идеальный" первый. А мне предлагали варианты 2 и 3. - Idler(Сегодня, 19:40)
- Как хотите, вам виднее. - SciFi(Сегодня, 19:46)
- Достаточно добавить ключик "-fsingle-precision-constant", чтобы не
париться насчет того, что флоаты могут быть рассмотрены как double! - Eddy_Em(Сегодня, 19:54)
- У вас там ошибка: 0.001 вместо 0.001f. Дело не в Яре и не в GCC. - SciFi(Сегодня, 19:31)
- У него может быть какая-то своя реализация printf, где по дефолту
рассматривается double. И если вместо gcc используется какой-нибудь
некошерный компилятор, вполне возможно, что сначала все вычисления
в double делаются.. Eddy_Em(54 знак., Сегодня, 19:23)
- При передаче параметров в функцию float в любом случае приводится к
double, от этого не уйти. Короче, не аргумент. Внутри printf можно
параметр сразу преобразовать обратно в float, так что потери будут
только на f2d и d2f, что уже не так страшно. - SciFi(Сегодня, 19:32)
- Исходный код printf я не смотрел, так что, вполне возможно, что я
не прав. Но на кой черт вообще printf в микроконтроллеры
засовывать? - Eddy_Em(Сегодня, 19:55)
- В данном случае, только для наглядности и читабельности. При тактовой до 120МГц я бы не стал, а уж на 8-битках... С АРМом на 240 я решил, что могу себе позволить. Еще неделю назад у меня в проекте всё выводилось своими функциями, но я постепенно перестал понимать, что и куда оно выводит - пол-страницы писанины на одну строчку вывода с двумя числами. Idler(840 знак., Сегодня, 20:44)
- Исходный код printf я не смотрел, так что, вполне возможно, что я
не прав. Но на кой черт вообще printf в микроконтроллеры
засовывать? - Eddy_Em(Сегодня, 19:55)
- При передаче параметров в функцию float в любом случае приводится к
double, от этого не уйти. Короче, не аргумент. Внутри printf можно
параметр сразу преобразовать обратно в float, так что потери будут
только на f2d и d2f, что уже не так страшно. - SciFi(Сегодня, 19:32)
- Это фича свежего GCC. Вот IAR во всех вариантах: видно что первые 2
- целиком в FPU, вторые - процессорные, во много раз дольше. Idler(2117 знак., Сегодня, 19:30)
- Не будет. Вот: SciFi(1 знак., Сегодня, 19:05, картинка)