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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
#1

Сравнение чисел - C++

30.01.2014, 19:15. Просмотров 416. Ответов 3
Метки нет (Все метки)

Есть у меня 2 числа:
3.1000000000000017 и 3.1000000000000000
Они как бы равны, но не получается их в блоке if сравнить.
Как их сравнить до 6-го числа после точки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 19:15     Сравнение чисел
Посмотрите здесь:

Сравнение чисел. C++
Сравнение чисел C++
C++ Сравнение трёх чисел
C++ Сравнение рациональных чисел
C++ Сравнение 3 чисел
Сравнение чисел C++
C++ Сравнение длинных чисел >, <
Сравнение целых чисел C++
C++ Сравнение чисел double в do {} while
Битовое сравнение чисел C++
Сравнение двух чисел C++
Сравнение двух чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
30.01.2014, 19:22     Сравнение чисел #2
Suares, грубый вариант:
C++
1
2
int a = 3.1000000000000017 * 1000000;
int b = 3.1000000000000000 * 1000000;
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
30.01.2014, 19:37  [ТС]     Сравнение чисел #3
Цитата Сообщение от zelim Посмотреть сообщение
грубый вариант:
Нет, не получается в if сравнить(
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
30.01.2014, 20:10     Сравнение чисел #4
Suares,
Если передать функциям меньше и больше параметр orEqual == true, то они превращаются в меньше либо равно, больше либо равно соответственно.
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
#include <iostream>
#include <cmath>
 
template <typename T> bool dEquals(T left, T right, T precision)
{
    return (fabs(left - right) < precision);
}
template <typename T> bool dLess(T left, T right, T precision, bool orEqual = false)
{
    if(dEquals(left, right, precision)) // За рамками точности, считаем числа равными
        return orEqual;
    return (left < right);
}
template <typename T> bool dGreater(T left, T right, T precision, bool orEqual = false)
{
    if(dEquals(left, right, precision))
        return orEqual;
    return (left > right);
}
 
int main()
{
    double f = 0.333333339, g = 1.0/3.0;
    std::cout << std::boolalpha << "f == g -- " << (f == g) << std::endl;
    // С точностью 8 знаков после запятой - числа равны
    std::cout << "dEquals(f,g) -- "  << dEquals(f,g,0.000001) << std::endl;
    // А вот с точностью 9 знаков уже не равны
    std::cout << "dEquals(f,g) -- "  << dEquals(f,g,0.000000001) << std::endl;
    return 0;
}
Yandex
Объявления
30.01.2014, 20:10     Сравнение чисел
Ответ Создать тему
Опции темы

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