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

Умещение диапазона в float - C++

Восстановить пароль Регистрация
 
Cend
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 100
22.06.2016, 09:50     Умещение диапазона в float #1
Задано количество точек n, расположенных через равные интервалы. Необходимо вычислить диапазон float для данного количества точек, так, чтобы шаг был минимально возможный для точности float.
Мои размышления как реализовать через цикл:
Т.к. точность падает линейно, необходимо n раз, начинаю с 0.0 вызвать:
C++
1
2
float val = 0.0f;
for(int i=0;i<n;i++) val = std::nextafter(val, FLT_MAX);
И мы получим величину шага float между значением n и следующим значением:
C++
1
double step = val - std::nextafter(val, FLT_MAX);
Диапазон будет:
C++
1
double width = step*n;
Но нужно реализовать без использования цикла, подскажите как
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2016, 09:50     Умещение диапазона в float
Посмотрите здесь:

C++ Ошибка cannot convert 'float' to 'float*'
C++ float *m=new float[n]
Float C++
C++ float
C++ Из float в string
C++ Сравнение float
Непонятка с float C++
C++ Ошибка преобразования: значение типа "float *" нельзя присвоить сущности типа "float"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,663
22.06.2016, 13:23     Умещение диапазона в float #2
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
//Задано количество точек n, расположенных через равные интервалы.
//Необходимо вычислить диапазон float для данного количества точек, так,
//чтобы шаг был минимально возможный для точности float.
///////////////////////////////////////////////////////////////////////////////
#include <cfloat>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <limits>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef float               T_float;
typedef unsigned long long  T_int;
///////////////////////////////////////////////////////////////////////////////
T_float     right_num( T_int    n )
{
    return      std::nextafter  (
                                    T_float(),
                                    std::numeric_limits< T_float >::max()
                                )
 
            *   (n - 1);
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::ios::sync_with_stdio( false );
    T_int  n{};
 
    for(;;)
    {
        for(;;)
        {
            std::cout   <<  "n = ";
            T_str   n_str;
            std::cin    >>  n_str;
 
            try
            {
                n   =   std::stoull( n_str );
                break;
            }
            catch(...)
            {}
        }//for
 
        std::cout   <<  std::setprecision
                            (
                                std::numeric_limits< T_float >::digits10
                            )
 
                    <<  "L = "
                    <<  0
                    <<  std::endl
                    <<  "R = "
                    <<  right_num( n )
                    <<  std::endl
                    <<  std::endl;
    }//for
}
Yandex
Объявления
22.06.2016, 13:23     Умещение диапазона в float
Ответ Создать тему
Опции темы

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