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

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

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

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

22.06.2016, 09:50. Просмотров 164. Ответов 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
Посмотрите здесь:

ОШИБКА [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; ...

float *m=new float[n] - C++
в задаче на массивы попалось float *m=new float.Что это значит?

Float - C++
Доброго всем времени суток. Я новичок в программировании и только начал учится прошу вашего понимания и помощи. Расскажите пожалуйста что...

float - C++
Столкнулся с такой проблемой. Допустим float a=0.125; При выводе printf(&quot;%.2f&quot;,a) выводит 0.13, а мне надо 0.12

ERROR with float - C++
Здравствуйте.. задача про нахождение общего сопротивления для параллельного и последовательного соединений(здесь все на кыргызском), но...

Из float в string - C++
Как из переменной типа флоат записать число в string? float x = -123.56; string Str; Нужно чтобы Str стало равно &quot;-123.56&quot;

Сравнение float - C++
void setup() { Serial.begin(9600); float azimuth = 0; float course = 180; float a = sin((azimuth -...

float vs string - C++
в общем есть такая конструкция FILE* pfi; char* fn = &quot;D:/test.txt&quot;; pfi= fopen(fn,&quot;w+&quot;); fputs(&quot;\tx=&quot;,pfi); fputs(x,pfi); ...

Разъяснение float f = 1.2F; - C++
Вчера читал статью про C++ и встретил код, написанный следующим методом float f = 1.2F; и пришел в замешательство. Переменная f...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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
}
Ответ Создать тему
Опции темы

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