Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
wtf bro
8 / 8 / 1
Регистрация: 30.07.2013
Сообщений: 161
#1

Вычислить математическое выражение - C++

26.09.2014, 22:06. Просмотров 743. Ответов 17
Метки нет (Все метки)

Как записать в С++ такое:

(a+b)^3 - (a^3+3ba^2) / 3ab^2 + b^2

Где а = 100
b = 0,001

Добавлено через 1 час 57 минут
UP them
http://www.cyberforum.ru/cpp-beginners/thread1681619.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2014, 22:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вычислить математическое выражение (C++):

Массив и математическое выражение
Здравствуйте! Вот такая задача. Дан такой А(12) = {2,5; 4,3; –0,57; 10,45;...

Математическое выражение в программе
я не понимаю что значит после V ноль и этот ноль будет 3 раза изменен на 1 2 3...

Записать математическое выражение на с++

Записать математическое выражение
Помогите запрограммировать формулу: ...

Написать математическое выражение на С++
Помогите решить функцию. Я не знаю как это написать в коде

17
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
26.09.2014, 22:12 #2
Возведение в степень
C++
1
std::pow( основание, степень );
Нужно подключить <cmath>.
Умножение через звездочку *.
Какие-то затруднения?

И, кстати, подобный пример уже разжевывали ведь
http://www.cyberforum.ru/cpp-beginners/thread1263396.html
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
26.09.2014, 22:14 #3
Причем, минимизируя количество операций. У меня получилось: 4 сложения (вычитания), 5 умножений и одно деление. Кто меньше?

ЗЫ степень, разумеется, не нужна. Как и мат.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
26.09.2014, 22:24 #4
Цитата Сообщение от _Ivana Посмотреть сообщение
Причем, минимизируя количество операций.
Это откуда требование?
Цитата Сообщение от _Ivana Посмотреть сообщение
степень, разумеется, не нужна.
Ну давай ещё умножение через сложение сделаем.
0
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,183
Завершенные тесты: 1
26.09.2014, 22:27 #5
Я бы записал так
C++
1
2
double T=(a+b);
double y=T*T*T - (a*a*a+3.0*b*a*a) /( 3.*a*b*b) + b*b;
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
26.09.2014, 22:30 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Это откуда требование?
Из соображений здравого смысла, минимизации количества операций и максимизации скорости выполнения. Чтобы можно было повысить скорость опроса датчиков, минимизировать задержку в цепи обратной связи управления и как следствие ракеты лучше летали.
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну давай ещё умножение через сложение сделаем.
Именно. Особенно в целых числах, если (где) нет аппаратного умножения. А умножение положительных целых на степени 2 в целых сделаем сдвигом. Но мое количество операций приведено для плавающих чисел.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
26.09.2014, 22:39 #7
Цитата Сообщение от _Ivana Посмотреть сообщение
Из соображений здравого смысла
Смысл тут один: ТС хочет чтобы за него решили задачку.
Цитата Сообщение от _Ivana Посмотреть сообщение
минимизации количества операций и максимизации скорости выполнения
Учитывая, что значение вычисляется для заведомо известных констант, ни о каком быстродействии речи быть не может. Результат можно получить ещё на стадии компиляции.
Цитата Сообщение от _Ivana Посмотреть сообщение
А умножение положительных целых на степени 2 в целых сделаем сдвигом.
Это оптимизатор сделает сам, даже лучше, чем ручками.
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
26.09.2014, 22:44 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Смысл тут один: ТС хочет чтобы за него решили задачку
Вот я и предложил участникам форума хоть немного разнообразить такую скучную постановку вопроса ТС Вон, zss, например, одну дополнительную переменную догадался завести, а банально дробь сократить, не говоря уже о более оптимальном преобразовании - уже поленился. А потом ракеты плохо летают...
А про заведомо известные константы - ну так это же учебная задача. А учиться лучше сразу правильно
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
26.09.2014, 22:49 #9
Цитата Сообщение от _Ivana Посмотреть сообщение
У меня получилось: 4 сложения (вычитания), 5 умножений и одно деление.
Демонстрация будет?
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
26.09.2014, 23:04 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Демонстрация будет?
Подозреваете во лжи или в ошибке? Будет. Думал, вдруг кто еще захочет проделать преобразования на уровне 6 класса средней школы. Если нет, то продемонстрирую.
ЗЫ могу и более интересные вещи продемонстировать в плане оптимизиции и ловли блох и тактов.

Добавлено через 8 минут
Раз никто играть не хочет, а демонстрацию спрашивают, то вот:
C++
1
2
3
4
float a, b;
..............................
float d = a+b, c = a/b, k = 1.0/3.0;
float r = d*d*d - c*(c*k+1) + b*b;
1
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
26.09.2014, 23:27 #11
Цитата Сообщение от _Ivana Посмотреть сообщение
C++
1
c = a/b, k = 1.0/3.0;
уже 2 деления Но в целом, не плохо.
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
26.09.2014, 23:30 #12
Цитата Сообщение от Tulosba Посмотреть сообщение
уже 2 деления
Неправда ваша - деление одно. Второе - вычисление константы на стадии компиляции и загрузка ее в память/регистр - при выполнении кода никакого деления не будет. Вы же эксперт, должны это понимать.
Цитата Сообщение от Tulosba Посмотреть сообщение
Но в целом, не плохо.
Надо же, удостоился похвалы специалиста... За задачу для шестого класса...
0
wtf bro
8 / 8 / 1
Регистрация: 30.07.2013
Сообщений: 161
27.09.2014, 02:53  [ТС] #13
Как всё простое можно гениально усложнить
Просто на данном этапе я вижу это именно так
Хотя задум и сама мысля очень правильны
0
Cryptoff
9 / 10 / 2
Регистрация: 18.06.2013
Сообщений: 119
27.09.2014, 04:33 #14
Цитата Сообщение от _Ivana Посмотреть сообщение
Из соображений здравого смысла, минимизации количества операций и максимизации скорости выполнения. Чтобы можно было повысить скорость опроса датчиков, минимизировать задержку в цепи обратной связи управления и как следствие ракеты лучше летали.
Для этих целей используйте ассемблер + сразу поймёте, как нужно минимизировать

Добавлено через 48 секунд
а для начала внимательно взгляните на выражение: одну дробь можно заменить единицей
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
27.09.2014, 05:30 #15
Цитата Сообщение от Cryptoff Посмотреть сообщение
одну дробь можно заменить единицей
Здесь всего она одна.

Причем мне кажется, что все, что слева от знака деления - это числитель, а все, что справа - знаменатель. Тогда все просто получается:
(3a+b)/(3a+1)
или
1 + ( b - 1 )/( 3a + 1 )
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
27.09.2014, 09:05 #16
На счет эффективности хотелось бы еще заметить, что на современных процах порой быстрее вычислить выражение по новой, чем считать его из памяти. Если не изменяет память, чуть ли не на таблице синусов такое проверялось.
0
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,183
Завершенные тесты: 1
27.09.2014, 11:32 #17
Цитата Сообщение от _Ivana Посмотреть сообщение
а банально дробь сократить
Тут вопрос более сложный - а имеем ли право сокращать!
Если бы была лично моя программа, то конечно, сократил бы.
А раз так написал преподаватель, то, наверное, главнее продемонстрировать умение правильно
записывать выражения.
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
27.09.2014, 15:07 #18
Цитата Сообщение от Cryptoff Посмотреть сообщение
Для этих целей используйте ассемблер
Спасибо, уже давно использую.
Цитата Сообщение от Cryptoff Посмотреть сообщение
+ сразу поймёте, как нужно минимизировать
Спасибо, некое понимание уже есть, хотел им поделиться, да видно выбрал неудачное время и место.
Цитата Сообщение от Cryptoff Посмотреть сообщение
а для начала внимательно взгляните на выражение: одну дробь можно заменить единицей
Такого уровня внимания мне не удалось достичь. Но я буду стараться. А теперь вы покажите ваш вариант оптимального расчета данного выражения в коде, короче чем мой. И всеми вместе посмотрим на него внимательно.
Цитата Сообщение от Tulosba Посмотреть сообщение
На счет эффективности хотелось бы еще заметить, что на современных процах порой быстрее вычислить выражение по новой, чем считать его из памяти.
Вполне правдоподобно, зависит от проца. Но лучше уметь при необходимости руками производить оптимизации, подобные приведенной.
Цитата Сообщение от zss Посмотреть сообщение
Тут вопрос более сложный - а имеем ли право сокращать!
Имхо, более сложный вопрос звучит не так. А звучит он: в каком порядке и как производить (оптимизированные) вычисления, чтобы точность результата была приемлемой на всей области определения входных аргументов. И над ним тоже можно подумать.
0
27.09.2014, 15:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2014, 15:07
Привет! Вот еще темы с решениями:

математическое выражение из string в int
Допустим есть строка вида (1+2*5)-2 как результат данного выражения перевестив...

Как записать математическое выражение?
Здравствуйте, столкнулся с проблемой как правильно записать данное...

Корректно записать математическое выражение
Картинка и мои моя одна из тщетных попыток: (log(x)/log(2.0))(3*cos(x)+4)-1;...

Надо представить математическое выражение на языке C++
Программа выдаёт неправильное решение. Поэтому и подумал, может я как то не...


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

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

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