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

Как программно различать число целое и с плавающей точкой - C++

Восстановить пароль Регистрация
 
RoboMaster
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
16.01.2013, 19:37     Как программно различать число целое и с плавающей точкой #1
Привет
Недавно решал задачу и там нужно было находить корни элементов массива и если корень целый то инкрементировать переменную. Я начал решать эту задачу и понял что не знаю как различать числа целые от плавающей точки.

Кидаю пример:

C++
1
2
3
4
5
6
for(int i = 0; i < size; i++)
{
      if(sqrt(massive[i])==/*целому числу*/) //как программно различать целые и дробные числа
     //так как корень из 5 - дробное число, а корень и 4 - целое число
     {count++;}
}
Помогите пожалуйста с моей проблемой. Очень интересны Ваши ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
16.01.2013, 20:50     Как программно различать число целое и с плавающей точкой #2
Корень из 4 не целое число, компилятор преобразует результат в double, тоесть 2.0
RoboMaster
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
16.01.2013, 20:52  [ТС]     Как программно различать число целое и с плавающей точкой #3
Я понимаю, оно может выглядеть как 2.0 и т.д.
А как вот различать числа 2.0 и 5.12345 ....
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
16.01.2013, 20:58     Как программно различать число целое и с плавающей точкой #4
Зачем вам это? Можно преобразовать типы.
RoboMaster
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
16.01.2013, 21:03  [ТС]     Как программно различать число целое и с плавающей точкой #5
просто нужно для решения задачи, она меня заинтересовала. Мне нужно находить целые числа и инкрементировать переменную. Это по задаче, нужно найти элементы массива которые являются квадратами целых чисел. Если делать приведение типов то я потеряю дробную часть, т.е. будет на 5.12345 а просто 5
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
16.01.2013, 21:06     Как программно различать число целое и с плавающей точкой #6
Вот, готовая задача
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main (){
    int a;
    int b = 0;
    double c = 0;
    int count = 0;
    for (;;)
    {
        cin >> a;
        c = sqrt (a);
        cout << "sqrt: " << c;
        b = sqrt (a);
        cout << "\nb = " << b;
        cout << "\ncount = " << count;
        if (b == c)
           count++;
    } 
    system ("PAUSE");
    return 0;
}
RoboMaster
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
16.01.2013, 21:17  [ТС]     Как программно различать число целое и с плавающей точкой #7
Спасибо. Очень умно Я б врят ли додумался))
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
16.01.2013, 21:17     Как программно различать число целое и с плавающей точкой #8
Переделал через массивы
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
#include <iostream>
#include <cmath>
#include <stdlib.h>
 
using namespace std;
 
int main (){
    srand (time(NULL) + rand());
    cout << "enter lenght of array: ";
    int lenght;
    cin >> lenght;
    int* a = new int [lenght];
    
    for (int i = 0; i < lenght; i++)
        a [i] = 0 + rand () % 200;
        
    int b = 0;
    double c = 0;
    int count = 0;
    for (int i = 0; i < lenght; i++)
    {
        c = sqrt (a [i]);
        cout << "\n\n" << a[i];
        cout << "\nsqrt: " << c;
        b = (int) sqrt (a [i]);
        cout << "\nb = " << b;
        if (b == c)
           count++;
        cout << "\ncount = " << count;
    } 
    system ("PAUSE");
    return 0;
}
RoboMaster
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
16.01.2013, 21:18  [ТС]     Как программно различать число целое и с плавающей точкой #9
Идею я понял, огромное спасибо ))
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
16.01.2013, 21:29     Как программно различать число целое и с плавающей точкой #10
может как-то так сделать?

C++
1
2
3
4
5
6
7
8
9
10
double a;
 
cin >> a;
 
a = sqrt(a);
 
if (a - int(a) < 0.00001)
    целое число;
else
    дробное число;
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
16.01.2013, 21:33     Как программно различать число целое и с плавающей точкой #11
type_info ?
( http://www.cplusplus.com/reference/typeinfo/type_info/ )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2013, 21:38     Как программно различать число целое и с плавающей точкой
Еще ссылки по теме:

C++ Класс : Число с плавающей запятой(точкой)
C++ Сравнение чисел с плавающей точкой
Из строки выделить подстроку, задающую вещественное число с плавающей точкой C++

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
16.01.2013, 21:38     Как программно различать число целое и с плавающей точкой #12
простое, понятное, а главное очень очень быстрое извлечение целочисленного квадратного корня
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
70
71
72
73
74
75
76
77
78
79
80
#include <stdint.h>
const uint16_t squares[] = {
    0, 1, 4, 9,
    16, 25, 36, 49,
    64, 81, 100, 121,
    144, 169, 196, 225,
    256, 289, 324, 361,
    400, 441, 484, 529,
    576, 625, 676, 729,
    784, 841, 900, 961,
    1024, 1089, 1156, 1225,
    1296, 1369, 1444, 1521,
    1600, 1681, 1764, 1849,
    1936, 2025, 2116, 2209,
    2304, 2401, 2500, 2601,
    2704, 2809, 2916, 3025,
    3136, 3249, 3364, 3481,
    3600, 3721, 3844, 3969,
    4096, 4225, 4356, 4489,
    4624, 4761, 4900, 5041,
    5184, 5329, 5476, 5625,
    5776, 5929, 6084, 6241,
    6400, 6561, 6724, 6889,
    7056, 7225, 7396, 7569,
    7744, 7921, 8100, 8281,
    8464, 8649, 8836, 9025,
    9216, 9409, 9604, 9801,
    10816, 11025, 11236, 11449,
    11664, 11881, 12100, 12321,
    12544, 12769, 12996, 13225,
    13456, 13689, 13924, 14161,
    14400, 14641, 14884, 15129,
    15376, 15625, 15876, 16129,
    16384, 16641, 16900, 17161,
    17424, 17689, 17956, 18225,
    18496, 18769, 19044, 19321,
    19600, 19881, 20164, 20449,
    20736, 21025, 21316, 21609,
    21904, 22201, 22500, 22801,
    23104, 23409, 23716, 24025,
    24336, 24649, 24964, 25281,
    25600, 25921, 26244, 26569,
    26896, 27225, 27556, 27889,
    28224, 28561, 28900, 29241,
    29584, 29929, 30276, 30625,
    30976, 31329, 31684, 32041,
    32400, 32761, 33124, 33489,
    33856, 34225, 34596, 34969,
    35344, 35721, 36100, 36481,
    36864, 37249, 37636, 38025,
    38416, 38809, 39204, 39601,
    40000, 40401, 40804, 41209,
    41616, 42025, 42436, 42849,
    43264, 43681, 44100, 44521,
    44944, 45369, 45796, 46225,
    46656, 47089, 47524, 47961,
    48400, 48841, 49284, 49729,
    50176, 50625, 51076, 51529,
    51984, 52441, 52900, 53361,
    53824, 54289, 54756, 55225,
    55696, 56169, 56644, 57121,
    57600, 58081, 58564, 59049,
    59536, 60025, 60516, 61009,
    61504, 62001, 62500, 63001,
    63504, 64009, 64516, 65025
};
inline int isqrt(uint16_t x) {
    const uint16_t *p = squares;
 
    if (p[128] <= x) p += 128;
    if (p[ 64] <= x) p +=  64;
    if (p[ 32] <= x) p +=  32;
    if (p[ 16] <= x) p +=  16;
    if (p[  8] <= x) p +=   8;
    if (p[  4] <= x) p +=   4;
    if (p[  2] <= x) p +=   2;
    if (p[  1] <= x) p +=   1;
 
    return p - squares;
}
Yandex
Объявления
16.01.2013, 21:38     Как программно различать число целое и с плавающей точкой
Ответ Создать тему
Опции темы

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