0 / 0 / 0
Регистрация: 01.05.2022
Сообщений: 3
1

Ошибка вычислений тип данных double C++

01.05.2022, 01:07. Показов 1168. Ответов 5

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
#include <iostream>
using namespace std;
 
int main()
{
    double rootd=5.000;
    double numunderroot=5.000;
    double num2=3.000;
    double num1=0.000;
    
    double degreeN=num2;
    for(int i=1;i<rootd-1;i++){
        degreeN=degreeN*num2;}
    double degreeNN=degreeN*num2;
 
    for(int i=0;i<10;i++){
        num1=num2;
        cout<<"num1:"<<num1<<"      ";
        num2=num1-((degreeNN-numunderroot)/(rootd*degreeN));
        cout<<"num2:"<<num2<<endl;
    }
    
    return 0;
}
Программа выдаёт:
num1:3 num2:2.41235
num1:2.41235 num2:1.82469
num1:1.82469 num2:1.23704
num1:1.23704 num2:0.649383
num1:0.649383 num2:0.0617284
num1:0.0617284 num2:-0.525926
num1:-0.525926 num2:-1.11358
num1:-1.11358 num2:-1.70123
num1:-1.70123 num2:-2.28889
num1:-2.28889 num2:-2.87654
Где во второй строчке уже вычислительная ошибка: вместо 1.82469 должно быть 1.95941
И код должен сводится к 1.37973 , но вместо этого резко уменьшается
Как это исправить??
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2022, 01:07
Ответы с готовыми решениями:

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std;...

Вывод тип данных double
Я ввожу например число 2.8974; Мне должно вывести 2.8974; Но мне выводит 2.0000 , в чем проблема...

Как выводить в Edit тип данных Double ?
Всем доброго вечера. Написал программу формулу для расчета вот код программы (кнопки): void...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double Akk(double x, double y, double...

5
247 / 217 / 47
Регистрация: 17.03.2022
Сообщений: 549
01.05.2022, 01:37 2
Поскольку вы не объяснили, почему от кода ожидается что-то другое, понять, что именно делалось не так, затруднительно. В таких случаях надо не только реализацию приводить, но и алгоритм, который она должна была реализовывать.

А из того, что уже есть, можно отметить лишь то, что цикл в строках 12-13 выполнится неизвестное количество раз (как повезет с архитектурой и компилятором). Хранить целые числа в вещественных переменных и сравнивать их фактически на равенство - очень плохая идея.
1
0 / 0 / 0
Регистрация: 01.05.2022
Сообщений: 3
01.05.2022, 11:14  [ТС] 3
Программа считает по методу Ньютона (итерационная процедура вычислений) функцию x^n=A получается уравнение в 19 строчке (точно правильное). В данном случае корень 5 степени из 5 (rootd - степень корня (всегда целая можно спокойно заменить тип данных на int) numunderroot - число под корнем, num2, num1 - предположение)
Проблема если считать на калькуляторе второй раз получается другое число, в отличии от программы. Хотя все уравнения верны, цикл тоже. Но в итоге вместо сведения к 1,379 идёт сильно в минус, из-за не правильных вычислений, я не знаю что делать, но ошибка точно в вычислениях.
0
3 / 2 / 1
Регистрация: 12.06.2021
Сообщений: 3
01.05.2022, 13:49 4
Лучший ответ Сообщение было отмечено WarkinW как решение

Решение

у тебя подсчет degreeN и degreeNN должен выполнятся внтутри цикла, так как эти значения зависят от num2, а они постоянно меняются, а у тебя они получаются постоянными)
1
0 / 0 / 0
Регистрация: 01.05.2022
Сообщений: 3
01.05.2022, 13:55  [ТС] 5
Спасибо, помогло )
0
3 / 2 / 1
Регистрация: 12.06.2021
Сообщений: 3
01.05.2022, 14:02 6
На всякий случай код:
C++
1
2
3
4
5
6
7
8
9
10
 for(int i=0;i<10;i++){
        
        degreeN=num2;
        for(int i=1;i<rootd-1;i++)
            {degreeN=degreeN*num2;}
        degreeNN=degreeN*num2;
            
        num2=num2-((degreeNN-numunderroot)/(rootd*degreeN));
        cout<<"num2:"<<num2<<endl;
    }
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2022, 14:02
Помогаю со студенческими работами здесь

Точность вычислений у double
Дана задача: &quot;Определить, на сколько нулей заканчивается факториал числа n&quot;. Пример: вводим &quot;25&quot;,...

Точности вычислений double
Вот у меня возникла проблема при подсчете ряда тейлора в заданном интервале. Проблема заключается...

Ошибка: Не удается неявно преобразовать тип "System.Func<double, double>" в "double"
Помогите решить проблему using System; using System.Collections.Generic; using...

тип данных double
прочитал в одной умной книге что данный тип (double) можно применять для вывода факториала до 170! ...

Изменить тип данных с int на double. SQLite
Добрый день, есть таблица в SQLite со столбцами типа INT. Требуется сделать их DOUBLE. ...

Тип данных single/double представление в памяти
Всем привет. Собственно стал вопрос о том, как выглядят типы данных single и double в памяти....

Каким типом можно заменить тип данных double в ms sql2008?
Подскажите каким типом можно заменить тип данных double в ms sql2008, заменил decimal, значения...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru