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

Деление чисел. Ошибка на ровном месте. Не пойму почему. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив http://www.cyberforum.ru/cpp-beginners/thread59608.html
Помогите решить задачу на С++ Дана вещественная таблица а . Найти среднее арифметическое положительных элементов таблицы и минимум абсолютного значения элементов. Найти их произведение.
C++ Бинарный файл Ошибка strcpy(rb.dr, DateTimePicker1->Date.c_str()); Не могу понять, что за ошибка) http://www.cyberforum.ru/cpp-beginners/thread59593.html
C++ Вычислить сумму элементов массива, расположенных между первым и последним положительными элементами
пожалуйста помогите решить задачу: Задача в одномерном массиве состоящем из n вещественных элементов, вычислить сумму элементов массива расположенных между первым и последним положительными элементами
C++ В одномерном массиве, состоящем из n вещественных, вычислить минимальный элемент
пожалуйста помогите мне решить задачи: В одномерном массиве, состоящем из n вещественных, вычислить минимальный элемент массива
C++ инклуды для написания 2 мерного тетриса http://www.cyberforum.ru/cpp-beginners/thread59566.html
хочу начать учить с++ с написания чего-нибудь веселенького, радующего глаз, решил начать с тетриса Вопрос: какие заголовочные файлы нужны подключить для реализации игры(плоская графика, обработка пользовательского ввода) для написания на чистом С++
C++ Из введенных целых чисел сформировать два списка типа стек с одинаковым количеством элементов. Из введенных целых чисел сформировать два списка типа стек с одинаковым количеством элементов. Разработать функцию, какая соединает два стеки в один с попарно взятыми элементами начальных стеков (начиная с вершины первого стека) .функция передает к основной программе адрес новой вершины полученного стека. В функции операции выделения и освобождения памяти не использовать! подробнее

Показать сообщение отдельно
Biblio
2 / 2 / 0
Регистрация: 30.04.2009
Сообщений: 27

Деление чисел. Ошибка на ровном месте. Не пойму почему. - C++

28.10.2009, 16:21. Просмотров 661. Ответов 6
Метки (Все метки)

Пишу задачу, где нужно вычислить простое выражение. И возникает проблема при делении 1 на другие числа. Код ниже:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//вычисление формулы
#include <iostream>
#include <iomanip>
#include <cmath>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int n, t;//данные вводятся пользователем
    double M = 0;
    double x = 0;
    double Pr = 0;
    double y1 = 0;//промежуточные значения  (каждой части своя переменная)
    double y2 = 0;//промежуточные значения  (каждой части своя переменная)
    double y3 = 0;//промежуточные значения  (каждой части своя переменная)
    double y4 = 0;//промежуточные значения  (каждой части своя переменная)
    
    cout << "Enter n and t\n";
    cin >> n >> t;
    cout << "n = " << n << ", t = " << t << endl;
    if (n == 0)
    {
        cout << "n = 0. n can't be = 0\n";
    }
    else
    {
        M = (2*n - t)/2;            
        if(M == 0)
        {
            cout << "M = 0. Can't divide on 0.\n";
        }
        else
        {
            x = t/sqrt(M);
            cout << "REsult. M = " << M << ", x = " << x << endl;
            y1 = sqrt(n/M);
            y2 = 1 - (pow(x, 4) - 12*pow(x, 2) + 12)/96*M;
            cout << "n = " << n << endl;
            y3 = 1 + 1/(8*n) + 1/(128*n*n); 
            y4 = exp(-pow(x, 2)/4);
            cout << "y1 = " << y1 << 
                ", y2 = " << y2 << 
                ", y3 = " << setiosflags(ios::fixed) << setiosflags(ios::showpoint) << setprecision (13) << y3 << 
                ", y4 = " << y4 << endl;
 
            Pr = y1*y2*y3*y4;
            cout << "Pr = " << setiosflags(ios::fixed)
                << setiosflags(ios::showpoint)
                << setprecision (13) << Pr << endl;
        }
    }
    return 0;
}
Проблема возникает вот с этим выражением y3 = 1 + 1/(8*n) + 1/(128*n*n);
Например, для данных n = 5; t = 8.
Если это выражение посчитать на калькуляторе y3 = 1 + 1/(8*5) + 1/(128*5*5) то получается y3 = 1,0253125 А в программе получается y3 = 1. То есть она отбрасывает дробную часть. Может кто-нибудь объяснить, почему так? Везде тип данных double.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru