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

Машинные ноль, эпсилон и бесконечность - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Shef4u
15 / 15 / 0
Регистрация: 31.10.2011
Сообщений: 116
22.04.2013, 00:28     Машинные ноль, эпсилон и бесконечность #1
Здравствуйте! Помогите пожалуйста разобраться что это такое и с чем его едят? я видел на вики формулы но всеровно как-то не понятно что это такое, зачем нужно и как обчислить в коде? Я знаю что есть встроенные функции для вывода этих значений для типа double, int и т.д. но мне нужно сделать это вручную. можете кто-нибудь объяснить и дать пример кода или формулы по которых считаются этих 3 значения? я думаю мне не составит труда это запрограммировать, но я просто не знаю КАК считаются эти значения..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 00:28     Машинные ноль, эпсилон и бесконечность
Посмотрите здесь:

C++ Бесконечность
Погрешность и бесконечность C++
C++ Представление чисел и машинные операции
C++ Вычислить машинную эпсилон
Вычисления с точностью эпсилон C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
22.04.2013, 06:44     Машинные ноль, эпсилон и бесконечность #2
Подробно можно прочесть здесь: http://www.cplusplus.com/reference/cfloat/

Например, для типа double получаем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include <cfloat>
using std::cout;
using std::cin;
 
int main()
{   cout<<"ZERO: Minimum representable floating-point number\n\
for DOUBLE type:\t"<<DBL_MIN;
    cout<<"\n\nINFINITE: Maximum finite representable floating-point\n\
number for DOUBLE type:\t"<<DBL_MAX;
    cout<<"\n\nEPSILON: Difference between 1 and the least value greater\n\
than 1 that is representable for DOUBLE type:\t"<<DBL_EPSILON;
    
 
    cin.get();
    return 0;
}
Миниатюры
Машинные ноль, эпсилон и бесконечность  
IrineK
Заблокирован
22.04.2013, 13:18     Машинные ноль, эпсилон и бесконечность #3
Если посмотреть для всех floating-point типов, то видно, что MSVS 2010 разницы между double и long 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
#include<iostream>
#include <cfloat>
#include <Windows.h>
 
using std::cout;
using std::cin;
 
const WORD  green = FOREGROUND_GREEN | FOREGROUND_INTENSITY,
            yellow = FOREGROUND_GREEN | FOREGROUND_RED |FOREGROUND_INTENSITY,
            red = FOREGROUND_RED |FOREGROUND_INTENSITY;
 
void showExtremes(const char *info, float f, double d, long double ld)
{   HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, green);
    cout<<info;
    SetConsoleTextAttribute(hConsole, red);
    cout<<"FLOAT\t\t DOUBLE\t\t LONG DOUBLE\n";
    SetConsoleTextAttribute(hConsole, yellow);
    cout<<f<<"\t"<<d<<"\t"<<ld;
}
 
int main()
{   showExtremes("ZERO: Minimum representable floating-point number\n", FLT_MIN, DBL_MIN, LDBL_MIN);
    showExtremes("\n\nINFINITE: Maximum finite representable floating-point\n", FLT_MAX, DBL_MAX, LDBL_MAX);
    showExtremes("\n\nEPSILON: Difference between 1 and the least value greater\n", FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON);
        
    cin.get();
    return 0;
}
Миниатюры
Машинные ноль, эпсилон и бесконечность  
Shef4u
15 / 15 / 0
Регистрация: 31.10.2011
Сообщений: 116
22.04.2013, 20:17  [ТС]     Машинные ноль, эпсилон и бесконечность #4
Цитата Сообщение от IrineK Посмотреть сообщение
Подробно можно прочесть здесь: http://www.cplusplus.com/reference/cfloat/

Например, для типа double получаем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include <cfloat>
using std::cout;
using std::cin;
 
int main()
{   cout<<"ZERO: Minimum representable floating-point number\n\
for DOUBLE type:\t"<<DBL_MIN;
    cout<<"\n\nINFINITE: Maximum finite representable floating-point\n\
number for DOUBLE type:\t"<<DBL_MAX;
    cout<<"\n\nEPSILON: Difference between 1 and the least value greater\n\
than 1 that is representable for DOUBLE type:\t"<<DBL_EPSILON;
    
 
    cin.get();
    return 0;
}
спасибо, но о встроенных функциях я тоже знаю...мне надо разобраться и подсчитать все ВРУЧНУЮ
Yandex
Объявления
22.04.2013, 20:17     Машинные ноль, эпсилон и бесконечность
Ответ Создать тему
Опции темы

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