float C++ представление вещественных данных с одинарной точностью

Тип float предназначен для представления вещественных чисел (чисел с плавающей точкой или запятой) одинарной точности.

- Тип float обычно занимает 32 бита (4 байта). Размер можно узнать командой


std::cout << sizeof(float);   //4 (байта)

- Диапазон представляемых значений типом float 3,4E–38 - 3,4E+38, где запись вида xE+N это x умножить на (10 в степени N)


#include <iostream> // cout
#include <limits>   // numeric_limits
using namespace std;
int main(){
    cout << numeric_limits<float>::min() << endl; //1.17549e-38   Минимальное число float
    cout << numeric_limits<float>::max() << endl; //3.40282e+38   Максимальное число float
}

- Верных значимых десятичных цифр 6-9. Определено в заголовочном файле limits.


cout << numeric_limits<float>::digits10 << endl; //6   Число значащих десятичных цифр у float

- Для обозначения числа с плавающей точкой одинарной точности (float) используется запись типа 3.14f или 3.f (с точкой и с символом f на конце, с точкой но без f на конце будет double). Если нет дробных знаков и число как будто целое - точку и ноль нужно добавить, например 32.0f или 32.f.

- Существует тип вещественных чисел как NAN (Not A Number) получающийся в результате ошибочных операций типа деление нуля но ноль или бесконечность на бесконечность и т.д. Для проверки результата работы функций и операций с плавающей точкой на результат NAN служит функция isnan() заголовочного файла cmath.


#include <iostream> // cout
#include <cmath>    // isnan()
using namespace std;
int main(){
    if(isnan(0.0f / 0.0f)){   // Результат деления 0 на 0 будет NAN
        cout << "NAN";      //NAN
    }
}

- Существует тип вещественных чисел как плюс или минус бесконечность INF (INFINITY) получающийся при переполнении в результате операции, например деления на ноль. Для проверки результата работы функций и операций с плавающей точкой на результат INF служит функция isinf() заголовочного файла cmath.


#include <iostream> // cout
#include <cmath>    // isinf()
using namespace std;
int main(){
    if(isinf(3 / 0.0f)){   // Результат деления на 0 будет INF
        cout << "INF";    //INF
    }
}

Преобразования float


#include <iostream> // stof(), to_string()
#include <cstring>  // strcpy()
int main(){
    float f1 = std::stof("3.14f");  // const char* to float

    const char* cpi = "3.14f";      // const char*
    float f2 = std::stof(cpi);      // const char* to float

    std::string pi = "3.14f";       // std::string
    float f3 = std::stof(pi);       // std::string to float

    std::string s1 = std::to_string(f3); // float to std::string

    const char* cch = std::to_string(f3).c_str(); // float to const char*

    // Корректно преобразовывать const char* в char* можно только если полученная строка не будет меняться (будет readonly)
    char* ch = (char*)std::to_string(f3).c_str(); // float to char* C-style
    ch = const_cast<char*>(std::to_string(f3).c_str()); // float to char* C++ style

    // Преобразование float в char* который можно изменять
    std::string str = std::to_string(f3);   // double to std::string
    char* buf = new char[str.length() + 1]; // Создаем буфер достаточной длины
    std::strcpy(buf, str.c_str());          // Преобразовываем std::string в const char* и копируем в char*

    char c = f3;        // float to char
    short s = f3;       // float to short
    int i = f3;         // float to int
    long l = f3;        // float to long
    long long ll = f3;  // float to long long
    double d = f3;      // float to double

    float f = c;        // char to float
    f = s;              // short to float
    f = i;              // int to float
    f = l;              // long to float
    f = ll;             // long long to float
    f = d;              // double to float
}
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

char символьный тип данных в С++ длиной 1 байт
char16_t символьный беззнаковый тип данных длиной 16 бит в С++11
char32_t символьный беззнаковый тип данных длиной 32 бит в С++11
char8_t символьный тип данных в С++20
Типы данных C++
double - тип данных для представления вещественных чисел двойной точности
enum перечисление С++
float C++ представление вещественных данных с одинарной точностью
int C++ целочисленный тип данных
Целочисленные типы С++ long и long long
short С++ целочисленный тип данных
signed C++ модификатор знакового целочисленного типа
typedef C++ создание псевдонимов для типов данных
typeid C++ определение типа данных
union C++ объединение переменных разных типов в общей памяти
unsigned С++ беззнаковые числа
void C++ для функций не возвращающих значений или задания пустого указателя
wchar_t С++ расширенный набор символов и строк