Тип 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
}
}
#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
}