Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
1

Положительная граница машинного нуля

08.11.2015, 06:13. Просмотров 652. Ответов 3
Метки нет (Все метки)

Привет всем.
Такое задание: положительную границу машинного нуля E можно определить, реализуя алгоритм: вычислить такое наименьшее https://www.cyberforum.ru/cgi-bin/latex.cgi?{E}_{k}, для которого выполняется условие https://www.cyberforum.ru/cgi-bin/latex.cgi?{E}_{k} > 0, причем https://www.cyberforum.ru/cgi-bin/latex.cgi?{E}_{k} = https://www.cyberforum.ru/cgi-bin/latex.cgi?{E}_{k-1} / 2, https://www.cyberforum.ru/cgi-bin/latex.cgi?{E}_{0} = 1, k = 1,...m. Найти положительную границу машинного нуля для вещественных типов float и double.

Написал программу:
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
#include <iostream>
#include <vector>
using namespace std;
 
void null(){
    vector<float> float1(10000000);
    vector<double> double1(10000000);
 
    float1[0] = 1.0;
    double1[0] = 1.0;
 
    float min = float1[0];
    double min1 = double1[0];
 
    int k = 1;
    int f = 1;
 
    for(;;){
        float1[k] = float1[k-1] / 2;
        if(float1[k] < 0)
            break;
        min = float1[k];
        k++;
    }
 
    for(;;){
        double1[f] = double1[f-1] / 2;
        if(double1[f] < 0)
            break;
        min1 = double1[f];
        f++;
    }
 
    cout << "Float: " << min << endl;
    cout << "Double: " << min1 << endl;
}
 
int main(){
    null();
 
    system("pause");
 
    return 0;
}
Вроде все верно...бесконечные циклы...break, если граница найдена. Но выдает ошибку "vector subscript out of range".
Что я делаю не так? Понятно, что выхожу за пределы векторов, но как тогда правильно задать их размер?
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2015, 06:13
Ответы с готовыми решениями:

Вычисление машинного нуля
Программа вычисляет и выводит на экран значение машинного нуля m0 для типов float и double....

Оценка значения машинного нуля относительно заданного вещественного числа (нужна блок-схема)
Программа оценивает значение машинного нуля относительно заданного вещественного числа (float,...

Положительная граница машинного нуля
1.1.Положительную границу машинного нуля E можно определить, реализуя алгоритм: вычислить такое...

Вычисление машинного нуля и машинного эпсилона
Помоги, пожалуйста, c заданием U=f(x,y)/φ(x,z) где f(x,y)=x^3+y^2 φ(z)=e^z при следующих x=2,...

3
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
08.11.2015, 07:37 2
никак, можете использовать push_back, интересно, а какой размер этих векторов вы все-таки предполагаете, когда начинаете алгоритм с 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
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
 
void null(){
    vector<float> float1;
   // vector<double> double1();
 
    float1.push_back(1.0);
    //double1.push_back(1.0);
 
    float min = float1[0];
   // double min1 = double1[0];
 
    int k = 1;
   // int f = 1;
 
    for(;;){
        float1.push_back (float1[k-1] / 2);
        if(float1[k] < 0)
            break;
        min = float1[k];
        k++;
        std::cout << k << ":   "<<scientific<<setprecision(8)<<min<< std::endl;
    }
 
    //for(;;){
        //double1[f].push_back(double1[f-1] / 2);
        //if(double1[f] < 0)
            //break;
        //min1 = double1[f];
        //f++;
    //}
 
    cout << "Float: " << min << endl;
    //cout << "Double: " << min1 << endl;
}
 
int main(){
    null();
 
    system("pause");
 
    return 0;
}
Добавлено через 1 минуту

Не по теме:

только ctrl-C вовремя нажимай :)

1
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
08.11.2015, 09:30 3
а не проще ли
C++
1
2
3
4
5
6
7
8
9
10
11
12
#define _FLOAT_
 
#ifdef _FLOAT_
  float current = 1.0, previous = 1.0;
#else
 double current = 1.0, previous = 1.0;
#endif
do{
previous = current;
current/=2.0;
}while(current>0);
cout<<previous;
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
10.11.2015, 05:00  [ТС] 4
Fallenworld, Спасибо, помог ваш вариант. Только я его переделал чуть. А с векторами что-то бесконечно вычисляло Потом еще всё таки добью вариант с векторами.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2015, 05:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вычисление машинного эпсилон и машинного нуля
Доброго времени суток. Есть текст программы, ответ считает, но он не правильный. Нужно что бы...

Структура элемента массива игрушка: название, цена, цвет, возрастной диапазон - нижняя граница, верхняя граница
Структура элемента массива игрушка: название, цена, цвет, возрастной диапазон - нижняя граница,...

Положительная последовательность
Положительная последовательность Будем называть последовательность положительной, если все числа...

положительная определенность матрицы
Как в матлабе проверить матрицу на положительную определенность,не используя eig?


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

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

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