Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Shaman163
5 / 5 / 0
Регистрация: 22.12.2011
Сообщений: 134
#1

Директива препроцессора в несколько строк - C++

23.12.2013, 15:48. Просмотров 328. Ответов 9
Метки нет (Все метки)

Подскажите пожалуйста как за дефайнить такую вот функцию
C++
1
2
3
4
5
    float Cosine(float a, float b, float value)
    {
        value = (1 - cos(value * F_PI)) * 0.5f;
        return a * (1 - value) + b * value;
    }
не могу разобраться как записать эту операцию в одно выражение..
мои тщетные попытки увенчались провалом. :<
C++
1
#define Cosine(a, b, value) (value = (1 - cos(value * F_PI)) * 0.5f; a * (1 - value) + b * value;)
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2013, 15:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Директива препроцессора в несколько строк (C++):

Директива препроцессора #if - C++
Вобще при коспиляции файла взятого с офф сайта микрософт endian.h Получаю вот такие ошибки 17|error: operator '==' has no left operand ...

директива препроцессора - C++
Не получается запустить простенькую программу на С++ Borland,вроде сделал все как надо,но выдает ошибку что не может подключиться к...

Директива препроцессора pragma - C++
Добрый день! Помогите, пожалуйста, не могу понять смысл такой записи. (интересуют строки с участием _PACKED(строки 2-6 и 51-60), и что...

Записать в файл несколько строк, а затем записать несколько строк из этого файла в другой - C++
Заранее создать текстовый файл 1.txt и записать в него несколько строк текста. Программа должна получить из него второй файл 2.txt, в...

Директивы препроцессора Составить программу, использующую директивы препроцессора - C++
1) Задать константы M1,M2,...,M5 и вычислить M1+ 2M2 + 3M3 + 4M4 + 5M5 2) С помощью директив #if, #else, #elif осуществлять выбор строк...

Несколько строк в одном string - C++
Добрый день! Такой вопрос. как сделать, что бы 1 string содержал несколько строк текста?(как его создать и выводить) так чтобы...

9
Arigato
Программист
281 / 178 / 95
Регистрация: 05.12.2013
Сообщений: 682
Записей в блоге: 5
23.12.2013, 15:59 #2
Я бы так сделал:
C++
1
2
#define VALUE(v) (1-cos((v)*F_PI))*0.5f
#define COSINE(a,b,v) (a)+(VALUE(v))*((b)-(a))
Второе выражение я преобразовал к виду: a+value(b-a), чтобы избавиться от повторяющегося value. При желании можно объединить две директивы в одну, просто вместо VALUE(v) записав выражение из директивы выше.
1
Shaman163
5 / 5 / 0
Регистрация: 22.12.2011
Сообщений: 134
23.12.2013, 16:07  [ТС] #3
Спасибо конечно, но не очень то помогло.. Мне нужен именно 1 дефайн. Поэтому собственно и спросил..
Все эти извращения проворачиваю исключительно в угоду оптимизации, а в случае повторного вызова выражения " (1-cos((v)*F_PI))*0.5f " оно будет работать ещё медленнее чем через вызов функции.. :<
0
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
23.12.2013, 16:27 #4
C
1
2
#define Cosine(a, b, value) \
    ((value = 0.5f * (1 - cos(value * F_PI))), (a) * (1 - value) + b * value)
По идее.
http://lmgtfy.com/?q=c%2B%2B+comma+separated+operators

Добавлено через 8 минут
Цитата Сообщение от Shaman163 Посмотреть сообщение
Все эти извращения проворачиваю исключительно в угоду оптимизации
C++
1
2
3
4
5
void Cosine(const float &a, const float &b, float &result) 
{
    value = (1 - cos(value * 3.14159265)) * 0.5f;
    value = a * (1 - value) + b * value;
}
1
Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
23.12.2013, 16:28 #5
Зачем в c++ что то дефайнить? Это же c++ а не c (плохой тон,господа). Используй в тупую вызов своей функции.
1
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
23.12.2013, 16:29 #6
Shaman163, Да, кстати, поиграйся с флагами оптимизации, сейчас компиляторы многое умеют, так что функция может пахать реже дефайна.
0
Shaman163
5 / 5 / 0
Регистрация: 22.12.2011
Сообщений: 134
23.12.2013, 16:39  [ТС] #7
Цитата Сообщение от Warezovvv Посмотреть сообщение
Это же c++ а не c
Видимо я просто ещё слишком зелен, чтобы знать такие штуки
Дефайнить показалось логичным, ибо на ООП не будет затрачен ресурс..
outoftime, Как же мне по вашему гуглить? если я не знал что загуглить..
За ответ большущее спасибо.
0
Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
23.12.2013, 16:43 #8
Цитата Сообщение от Shaman163 Посмотреть сообщение
Видимо я просто ещё слишком зелен, чтобы знать такие штуки
Дефайнить показалось логичным, ибо на ООП не будет затрачен ресурс..
outoftime, Как же мне по вашему гуглить? если я не знал что загуглить..
За ответ большущее спасибо.
вместо дефайн давно есть inline функции.
1
outoftime
║XLR8║
755 / 655 / 88
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
23.12.2013, 16:45 #9
Shaman163, http://mmcs.sfedu.ru/~ulysses/IT/C++/using_gcc.html раздел "Оптимизация" флаг -O3
Наиболее «агрессивная» оптимизация, включаются развертку циклов и автоматическое встраивание функций.

Искать "флаги оптимизации" и их описание
1
Arigato
Программист
281 / 178 / 95
Регистрация: 05.12.2013
Сообщений: 682
Записей в блоге: 5
23.12.2013, 18:35 #10
Цитата Сообщение от Shaman163 Посмотреть сообщение
Мне нужен именно 1 дефайн.
Так я вам объяснил, как их в один объединить:

C++
1
#define COSINE(a,b,v) (a)+((1-cos((v)*F_PI))*0.5f)*((b)-(a))
Добавлено через 1 минуту
Цитата Сообщение от Shaman163 Посмотреть сообщение
а в случае повторного вызова выражения " (1-cos((v)*F_PI))*0.5f " оно будет работать ещё медленнее чем через вызов функции
Вы вообще читали мои пояснения? Никакого повторного вызова не будет, потому как ваше выражение сводится к a+value*(b-a).
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2013, 18:35
Привет! Вот еще темы с ответами:

Вывести несколько строк в файл - C++
Условие #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;cstring&gt; const int N=100; std :: ifstream...

Функция изменяющая сразу несколько строк - C++
Нужно, чтобы функция редактировала несколько входящих строк. char str1; char str2; void function1(char*&amp; str1, char*&amp; str2) ...

Несколько ошибок при обработке строк - C++
Доброго времени суток. При тестировании обнаружил несколько проблем с обработкой строки. 1. не работает с русскими словами. (qwerty -...

Как используя stringstream считать несколько строк? - C++
Мне нужно считать с помощью stringstream данные такого формата: вводится количество строк, потом в каждой строке сначала название страны, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru