double - тип данных для представления вещественных чисел двойной точности

Тип double предназначен для представления вещественных чисел (чисел с плавающей точкой или запятой).
- Тип double занимает 64 бита (8 байт). Размер можно узнать командой


std::cout << sizeof(double);   //8 (байт)

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


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

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


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

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

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


#include <iostream> // cout
#include <cmath>    // isnan()
using namespace std;
int main(){
    if(isnan(0.0 / 0.0)){   // Результат деления 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.0)){   // Результат деления на 0 будет INF
        cout << "INF";    //INF
    }
}

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


#include <iostream> // stod(), to_string()
#include <cstring>  // strcpy()
int main(){
    double d1 = std::stod("3.14");  // const char* to double

    const char* cpi = "3.14";       // const char*
    double d2 = std::stod(cpi);     // const char* to double

    std::string pi = "3.14";        // std::string
    double d3 = std::stod(pi);      // std::string to double

    std::string s1 = std::to_string(d3); // double to std::string

    const char* cch = std::to_string(d3).c_str(); // double to const char*

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

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

    char c = d3;        // double to char
    short s = d3;       // double to short
    int i = d3;         // double to int
    long l = d3;        // double to long
    long long ll = d3;  // double to long long

    double d = c;       // char to double
    d = s;              // short to double
    d = i;              // int to double
    d = l;              // long to double
    d = ll;             // long long to double
}
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 С++ расширенный набор символов и строк