Форум программистов, компьютерный форум CyberForum.ru

Исправить ошибку в выражении - C++

Восстановить пароль Регистрация
 
kombabalomba
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 8
07.02.2014, 20:10     Исправить ошибку в выражении #1
A[i][j]=exp(-0.3*(i+j))*(j-5.3)*(j-0.7)*(j-6.5)*pow(i+j,2);
где ошибка в строчке?
выражение
aij=e-0.3(i+j)(j-5.3)(j-0.7)(j-6.5)(i+j)2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 20:10     Исправить ошибку в выражении
Посмотрите здесь:

C++ исправить ошибку
исправить ошибку C++
C++ исправить ошибку
исправить ошибку C++
C++ Исправить ошибку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
07.02.2014, 20:20     Исправить ошибку в выражении #2
kombabalomba, скорее всего в pow(i + j, 2), i + j надо перевести в тип double:
C++
1
pow((double)(i + j), 2);
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
07.02.2014, 20:30     Исправить ошибку в выражении #3
Цитата Сообщение от GuGo1991 Посмотреть сообщение
скорее всего в pow(i + j, 2), i + j надо перевести в тип double:
C++
1
pow((double)(i + j), 2);
Как-то сомнительно это. pow и так принимает double, и приведение выполнится автоматически.

kombabalomba
Какого типа у вас A[i][j]? Не int случаем?
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
07.02.2014, 20:43     Исправить ошибку в выражении #4
Цитата Сообщение от DrOffset Посмотреть сообщение
Как-то сомнительно это. pow и так принимает double, и приведение выполнится автоматически.
Не выполнится. Компилятор должен ругаться.
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
07.02.2014, 20:46     Исправить ошибку в выражении #5
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Не выполнится. Компилятор должен ругаться.
Не должен:
C++
1
     double f = 5;
http://ideone.com/ELxpHf
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
07.02.2014, 20:54     Исправить ошибку в выражении #6
DrOffset, компилятор не должен такое игнорировать.
Где вы компилировали? На пример в Dev-C++ такое не катит.
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
07.02.2014, 21:09     Исправить ошибку в выражении #7
Цитата Сообщение от GuGo1991 Посмотреть сообщение
DrOffset, компилятор не должен такое игнорировать.
Где вы компилировали? На пример в Dev-C++ такое не катит.
Я дал ссылку на онлайн компилятор, пример собирается. Там GCC 4.8.1.

Standard C++11:
8.5.4/6
A narrowing conversion is an implicit conversion
— from a floating-point type to an integer type, or
— from long double to double or float, or from double to float, except where the source is a constant
expression and the actual value after conversion is within the range of values that can be represented
(even if it cannot be represented exactly), or
from an integer type or unscoped enumeration type to a floating-point type, except where the source
is a constant expression and the actual value after conversion will fit into the target type and will
produce the original value when converted back to the original type, or
— from an integer type or unscoped enumeration type to an integer type that cannot represent all the
values of the original type, except where the source is a constant expression and the actual value after
conversion will fit into the target type and will produce the original value when converted back to the
original type.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
07.02.2014, 23:10     Исправить ошибку в выражении #8
DrOffset, у меня GCC 3.4.2, неявно не пройдёт
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 23:20     Исправить ошибку в выражении
Еще ссылки по теме:

Исправить ошибку C++
Исправить ошибку C++
C++ Найти ошибку в регулярном выражении

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

Или воспользуйтесь поиском по форуму:
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
07.02.2014, 23:20     Исправить ошибку в выражении #9
Цитата Сообщение от GuGo1991 Посмотреть сообщение
DrOffset, у меня GCC 3.4.2, неявно не пройдёт
Я понял почему. Уберите using namespace std и все соберется. Проблема не в обсуждаемой теме, а в том, что при using namespace std в глобальное пространство имен добавляются эквивалентные функции, с одинаковыми параметрами (одна std:: pow, другая просто pow), ошибка в выборе между ними.

Что касается приведенной мной цитаты из стандарта - она распространяется также и на все компиляторы (претендующие на соответствие стандарту) и версии стандарта(С++98, С++2003), в том числе и на GCC 3.х.х.
Yandex
Объявления
07.02.2014, 23:20     Исправить ошибку в выражении
Ответ Создать тему
Опции темы

Текущее время: 16:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru