Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Cend
2 / 2 / 0
Регистрация: 25.02.2013
Сообщений: 114
#1

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

22.06.2016, 09:50. Просмотров 193. Ответов 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;
Но нужно реализовать без использования цикла, подскажите как
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2016, 09:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Умещение диапазона в float (C++):

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; float f1(float x)/*vira*enie 1*/ {return (x*cos(x))/(1+ pow(x,2));} ...

Чем отличаются float преобразования (float)var от float(var) - C++
Здравствуйте! Подскажите, чем отличается (float)var от float(var)

invalid types `float[float]' for array subscript - C++
void SEARCH(float vol, float price, int i) { if (i&gt;N) { if(price&gt;maxprice) { ...

неверное приведение void* к *float а далее к float - C++
Почему когда привожу void* к int* потом к int то все работает, данные не бьются и работают нормально, когда делаю те же операции но с...

cannot convert `float' to `float*. Почему так происходит? - C++
всем привет, помогите исправить ошибки... а то голова мало варит уже, а завтра надо сдать уже #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Ошибка cannot convert 'float' to 'float*' - C++
Здравствуйте, что означает error: cannot convert 'float' to 'float*' for argument '1' to 'int mas_time(float*, int)'? Из-за чего она...

1
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
22.06.2016, 13:23 #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
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2016, 13:23
Привет! Вот еще темы с ответами:

ГСЧ для float из всего диапазона - C++
Ребят, подскажите, пожалуйста, как можно сгенерировать число типа float из всего диапазона данного типа? Причем, если получится NaN, +Inf,...

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) - C++
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй подпрограме.Извиниет за ошибки.Не владею руским.Помогите...

"Значение типа float* нельзя использовать для инициализации сущности типа float" - C++
#include &lt;math.h&gt; #include&lt;iostream&gt; #include &lt;iomanip&gt; #include&lt;conio.h&gt; using namespace std; ...

Не получается исправить ошибку (Вводится диапазон, где 1-ое число-начало диапазона, 2-ое число приращени, 3-е число конец диапазона) - C++
Здравствуйте. Не могу исправить ошибку. Задание: Вводится диапазон, (например 5,1,10) где 1-ое число-начало диапазона, 2-ое число...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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