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

машинный нуль - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Tema11
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 14
20.12.2012, 17:32     машинный нуль #1
Добрый вечер. Есть программа для нахождения машинного нуля для типов данных float, 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
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream> 
using namespace std;
 
float machine_zero(float e, int &k)
{
    float e1;
    k = 0;
 
    do {
        e /= 2.0;
        e1 = e + 1.0;
        k++;
    } while(e1 > 1.0);
 
    return e;
}
 
double machine_zero(double e, int &k)
{
    double e1;
    k = 0;
 
    do {
        e /= 2.0;
        e1 = e + 1.0;
        k++;
    } while(e1 > 1.0);
 
    return e;
}
 
long double machine_zero(long double e, int &k)
{
    long double e1;
    k = 0;
 
    do {
        e /= 2.0;
        e1 = e + 1.0;
        k++;
    } while(e1 > 1.0);
 
    return e;
}
 
int main(int argc, char *argv[])
{
    int k = 0;
 
    // Для float
    float f_e = machine_zero((float) 1.0, k);
    cout << "float" << endl;
    cout << "Число делений на 2: " << k << endl;
    cout << "Машинный нуль: " << f_e << endl;
 
    // Для double
    double d_e = machine_zero((double) 1.0, k);
    cout << "double" << endl;
    cout << "Число делений на 2: " << k << endl;
    cout << "Машинный нуль: " << d_e << endl;
 
    // Для long double
    long double ld_e = machine_zero((long double) 1.0, k);
    cout << "long double" << endl;
    cout << "Число делений на 2: " << k << endl;
    cout << "Машинный нуль: " << ld_e << endl;
 
    return 0;
 }
Но есть небольшая загвоздка , как сделать для float и double через шаблон типов данных?


C++
1
2
3
4
5
template <class type>
type MZ(type e, int &k)
{
... //Тело функции
}
для вот этой части кода

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
int main(int argc, char *argv[])
{
int k = 0;
 
// Для float
float f_e = machine_zero((float) 1.0, k);
cout « "float" « endl;
cout « "Число делений на 2: " « k « endl;
cout « "Машинный нуль: " « f_e « endl;
 
// Для double
double d_e = machine_zero((double) 1.0, k);
cout « "double" « endl;
cout « "Число делений на 2: " « k « endl;
cout « "Машинный нуль: " « d_e « endl;
 
// Для long double
long double ld_e = machine_zero((long double) 1.0, k);
cout « "long double" « endl;
cout « "Число делений на 2: " « k « endl;
cout « "Машинный нуль: " « ld_e « endl;
 
return 0;
}
Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 17:32     машинный нуль
Посмотрите здесь:

C++ машинный код c++
C++ Проверка деления на нуль
Вставить после каждой серии нуль C++
Длина строки и нуль-терминатор C++
C++ Инициализация переменных в нуль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
20.12.2012, 19:28     машинный нуль #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
template <class T>
T func(T x)
{
   return x*x; 
}
int main()
{
     std::cout<<func<int>(3);
     return 0;
}
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
20.12.2012, 19:33     машинный нуль #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T>
T machine_zero(T e, int &k)
{
    float e1;
    k = 0;
 
    do {
        e /= 2.0;
        e1 = e + 1.0;
        k++;
    } while(e1 > 1.0);
 
    return e;
}
 
...
    // Для float
    float f_e = machine_zero(1.0F, k);
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.12.2012, 19:49     машинный нуль #4
Не знаю такого понятия. Машинный ноль знаю: машинный эпсилон есть минимальное значение, при сложении которого с единицей сумма не равна единице. А ноль читал на вике и нифига не понял. Даже отрицательный ноль понятнее.
Tema11
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 14
24.12.2012, 19:21  [ТС]     машинный нуль #5
Afflicted, Спасибо, а что подразумевается под многоточием здесь?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T>
T machine_zero(T e, int &k)
{
    float e1;
    k = 0;
 
    do {
        e /= 2.0;
        e1 = e + 1.0;
        k++;
    } while(e1 > 1.0);
 
    return e;
}
 
...
    // Для float
    float f_e = machine_zero(1.0F, k);
Yandex
Объявления
24.12.2012, 19:21     машинный нуль
Ответ Создать тему
Опции темы

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