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

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

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

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

02.03.2014, 00:37. Просмотров 226. Ответов 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;
    }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 00:37     неожиданный результат
Посмотрите здесь:

Невозможный результат C++
ненаходит результат! C++
не выводит результат C++ C++
Не выводит результат C++
C++ Результат компиляции
Результат не выводиться( C++
C++ Неожиданный результат при сравнении производительности вектора и обычного массива
C++ Почему функция atoi возвращает неожиданный результат?
Неожиданный результат при выводе значения переменной, несмотря на инкремент C++
C++ Неожиданный консольный вывод (упражнения 3 к главе 6 книги Стивена Праты)
C++ Не выводется результат
Не выдает результат C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5411 / 1794 / 327
Регистрация: 10.12.2010
Сообщений: 5,297
Записей в блоге: 3
02.03.2014, 00:54     неожиданный результат #2
Цитата Сообщение от snap492 Посмотреть сообщение
вот тут считает хрен знает как
Поподробнее можно? Со значениями переменных желательно.

Добавлено через 54 секунды
Цитата Сообщение от snap492 Посмотреть сообщение
C++
1
i1=static_cast <double> (i);
Это я бы заменил на это:
C++
1
i1=i*1.0;
Сие хоть понятно как себя поведет.
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.03.2014, 00:56     неожиданный результат #3
int в double неявно преобразуется без потери данных. поэтому явные касты и прочие хитрости - лишнее.
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 минут
хз что произошло но как то рассосалось само по себе теперь решает верно может был глюк компилятора какой то
всем спс
модераторы прошу закрыть тему
DU
1479 / 1055 / 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;
Yandex
Объявления
02.03.2014, 02:32     неожиданный результат
Ответ Создать тему
Опции темы

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