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

Засада с машинным эпсилон, или Либо я дурак - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Тема: Записи. Работа с текстовыми файлами http://www.cyberforum.ru/cpp-beginners/thread634393.html
Тема: Записи. Работа с текстовыми файлами. Дан файл f, содержащий сведения о багаже нескольких пассажиров. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах). Найти число пассажиров, имеющих более двух вещей и число...
C++ Отобразить вектор в обратном порядке не используя реверсивные итераторы Отобразить вектор в обратном порядке не используя реверсивные итераторы никак не могу в цикле вывести последний(самый первый) элемент http://www.cyberforum.ru/cpp-beginners/thread634358.html
C++ минимум среди сумм элементов диагоналей, параллельных главной
Оформить каждую задачу в виде функции. Все необходимые данные для функций должны передаваться в качестве параметров. Использование глобальных переменнх в функциях не допускается. По теме "Массивы". Найти: 1) сумму элементов в тех строках, которые не содержат отрицательных элементов; 2) минимум среди сумм элементов диагоналей, параллельных главной. По теме "Обработка символьных данных и...
Создание папки в Linux C++
Привет форумчане!! Подскажите апишку с директивой что бы в линухе можно было создать папку в указаной пользователем директории!?
C++ Включние заголовочного файла name.h http://www.cyberforum.ru/cpp-beginners/thread634321.html
Доброго времени суток. Суть проблемы такова: допустим есть папка, в которой куча хедеров (.h) + в ней еще папки в которых еще куча хедеров и т.д. Есть главный main.h который подключает другие библиотеки из этой папки, а подключенные подключают другие и т.д. Так вот, во всех хедерах подключение написано следующем образом : //main.h #include <main/temp.h> #include <temp2.h> Само сабой это...
C++ Что такое char* ? char* szString = "Randy"; Объясните, чем в данном случае является szString? Если это указатель, то почему ему напрямую можно присвоить значение? Ведь указатели с адресами работают. Очень уж непонятна мне роль * в этом примере. подробнее

Показать сообщение отдельно
kozlik_kozlik
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
09.08.2012, 22:20  [ТС]     Засада с машинным эпсилон, или Либо я дурак
ValeryS, раз коды не равнозначны, то почему дают одинаковый результат (для 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
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
using std::cout;
using std::endl;
 
#include <iomanip>
 
using std::ios;
using std::setiosflags;
 
int main()
{
    long double a, b, e;
    int counter;
 
    e=1.0; b=1.0; a=1.0;
 
    counter=0;
 
    do
    {
        e=e/2;
        a=b+e/2;
 
        cout << counter << " " << e << endl;
 
        counter++;
    }while (a>b);
 
    cout << endl;
 
    cout << setiosflags(ios::scientific);
 
    cout << sizeof(e) << endl;
    cout << "eps=" << e << endl;
    cout << "counter=" << counter << endl;
 
    return 0;
}
Второй код
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
#include <iostream>
 
using std::cout;
using std::endl;
 
#include <iomanip>
 
using std::ios;
using std::setiosflags;
 
int main()
{
    long double a, e;
    int counter;
 
    e=1.0; a=1.0;
 
    counter=0;
    while (e/2+a>a)
    {
        e=e/2;
 
        cout << counter << " " << e << endl;
 
        counter++;
    }
 
    cout << endl;
 
    cout << setiosflags(ios::scientific);
 
    cout << sizeof(e) << endl;
    cout << "eps=" << e << endl;
    cout << "counter=" << counter << endl;
 
    return 0;
}
Добавлено через 4 минуты
ValeryS, на вот тебе результаты работы первого кода и второго:
http://ideone.com/leMLY
http://ideone.com/3zcTb

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