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

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

Войти
Регистрация
Восстановить пароль
 
snap492
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 3
#1

неожиданный результат - C++

02.03.2014, 00:37. Просмотров 247. Ответов 4
Метки нет (Все метки)

не могу понять в чем проблема приложение рассчитывает по первым 2 условиям верно а по второму какую то хрень
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//программа по расчету вводимых значений согласно условию вводу
#include <iostream>
#include <math.h>
using namespace std;
int main()
    {
    int i0, i;
    double i1,a,e,fobs;
    cout << "Введите i: ";
    cin>>i;
    cout << "Введите a: ";
    cin>>a;
    i0=i%2   ;
        if (i0 == 0 && a>0)  //тут все считается правильно согласно условия остаток равен нулю и а больше нуля
            {  
             e= i*sqrt(a);
             cout <<e<<endl;
            }
        else            
            if (i0 != 0 && a<0) // тут тоже все считает правильно остаток не равен нулю и а меньше нуля
                {
                fobs = fabs(a);
                e=(i/2)*sqrt(fobs)  ;
                cout <<e<<endl;
                }             
            
            else // а вот тут считает хрен знает как
                {
                i1=static_cast <double> (i);
                fobs = fabs(i1) * fabs(a);
                e=sqrt(fobs);
                cout <<e<<endl;
                }           
            system("pause");
            return 0;
    }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 00:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос неожиданный результат (C++):

Функция acos (из math.h) выдает неожиданный результат - C++
Столкнулся с необъяснимой ситуацией) double z=((_x2-_x1)*(_x3-_x1) + (_y2-_y1)*(_y3-_y1))/(sqrt((_x2-_x1)*(_x2-_x1) +...

Почему функция atoi возвращает неожиданный результат? - C++
char chislo; int kol_OB; chislo = '2'; chislo = '4'; kol_OB = atoi(chislo); Почему kol_OB = 18?

Неожиданный результат при выводе значения переменной, несмотря на инкремент - C++
подскажите почему значения a и с начинаются с 1 а не с 2 стоит же &quot;++&quot; int a = 1; void f() { int b = 1; // инициализируется...

Неожиданный результат при сравнении производительности вектора и обычного массива - C++
Добрый день. Ради интереса сравнил проиводительность вектора с обычным массивом и получил неожиданный результат. #include &lt;iostream&gt;...

Неожиданный консольный вывод (упражнения 3 к главе 6 книги Стивена Праты) - C++
:-| Вообщем имеется код (решение 3 упражнения к главе 6 книги Прата): #include &lt;iostream&gt; #include&lt;cstdlib&gt; #include&lt;string&gt; ...

Задачу создать 2-мя способами:1) передавать результат работы подпрограммы через результат, возвращаемый функци - C++
Здравствуйте, дорогие форумчане! Будьте добры, помогите не совсем опытному юзеру разобраться с небольшим непониманием : дано условие (см....

4
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
02.03.2014, 00:54 #2
Цитата Сообщение от snap492 Посмотреть сообщение
вот тут считает хрен знает как
Поподробнее можно? Со значениями переменных желательно.

Добавлено через 54 секунды
Цитата Сообщение от snap492 Посмотреть сообщение
C++
1
i1=static_cast <double> (i);
Это я бы заменил на это:
C++
1
i1=i*1.0;
Сие хоть понятно как себя поведет.
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.03.2014, 00:56 #3
int в double неявно преобразуется без потери данных. поэтому явные касты и прочие хитрости - лишнее.
0
snap492
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 3
02.03.2014, 02:26  [ТС] #4
Цитата Сообщение от snap492 Посмотреть сообщение
вот тут считает хрен знает как
Поподробнее можно? Со значениями переменных желательно.

Добавлено через 54 секунды
Цитата Сообщение от snap492 Посмотреть сообщение
Код C++
1
i1=static_cast <double> (i);
Это я бы заменил на это:
Код C++
1
i1=i*1.0;
Сие хоть понятно как себя поведет.
пример берем не четное 9 так как оно легко выводится в целое из под корня и берем положительное число 4 данные переменные несоответствуют значениям if следовательно должно считаться по второму else в ответе мы должны получить 6 а программа выдает ответ 8
а насчет явного преобразования типов вроде тоже все понятно
int в double неявно преобразуется без потери данных. поэтому явные касты и прочие хитрости - лишнее.
согласен но MS Visual C++ 2008 с использованием math.h ругается что с функцией fabs (i) не ясно какой тип float, double, long double.

Добавлено через 25 минут
хз что произошло но как то рассосалось само по себе теперь решает верно может был глюк компилятора какой то
всем спс
модераторы прошу закрыть тему
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.03.2014, 02:32 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
fabs(i) - тут да. неоднозначность.
double i1=static_cast <double> (i); // тут явное преобразование лишнее. можно без него:
double i1=i;
ну и если вы i1 завели только для разрешения этой неоднозначности, то лучше ее разрешать
в точке вызова этой функции, где явный каст вполне уместен:
fabs(static_cast<double>(i)); // не нужны посредники вроде i1;
1
02.03.2014, 02:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2014, 02:32
Привет! Вот еще темы с ответами:

Объяснить результат и вывести на экран результат логического выражения - C++
Объяснить результат и вывести на экран результат логического выражения T = S для заданных значений логических переменных a, b, c. ...

Неожиданный выход из цикла при вводе "е/Е" - C++
пытался разобраться с этой проблемой в другой теме, но решил все же вынести в отдельную, т.к. хочется понять, это UB/глюк или моё упущение....

"Неожиданный" пропуск ввода при заполнении пользователем полей в массиве объектов типа "Student" - C++
Здравствуйте. Решил создать небольшой класс &quot;Студент&quot; с массивом объектов. При первом прохождении цикла (для object) все работает хорошо,...

Не выводит результат - C++
Здравствуйте! Начал изучать данный язык программирования, написал следующую коротенькую программу: #include &lt;iostream.h&gt; #include...


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

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

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