C++学习笔记三:变量与数据类型(浮点型)
1. 数据类型与所占内存大小
| 类型 | 大小 | 精度 | 注意 |
| float | 4 | 7 | |
| double | 8 | 15 | 默认 |
| long double | 16 | >double |
精度就是有效数字。
2. 声明和初始化
float number1 {1.12345678901234567890f}; // Precision : 7 double number2 {1.12345678901234567890}; // Precision : 15 long double number3 {1.12345678901234567890L};
后缀f显式声明变量为float类型,而不用编译器进行转化。后缀L同理。
2.1 精度的损失
#include <iostream> #include <iomanip> int main(){ float number1 {1.12345678901234567890f}; // Precision : 7 double number2 {1.12345678901234567890}; // Precision : 15 long double number3 {1.12345678901234567890L}; std::cout << std::setprecision(20); // Control the precision from std::cout. std::cout << "number1 is : " << number1 << std::endl; //7 digits std::cout << "number2 is : " << number2 << std::endl; // 15'ish digits std::cout << "number3 is : " << number3 << std::endl; // 15+ digits }
运行结果为:number1 is : 1.1234568357467651367
number2 is : 1.1234567890123456912
number3 is : 1.1234567890123456789
number2 is : 1.1234567890123456912
number3 is : 1.1234567890123456789
精度由于在声明变量的时候规定了不同的类型而产生了不同的精度损失。
另一个精度损失的例子(narrow conversion):
2.3 无穷大和Nan
float number4 = 192400023.0f; // Error : narrowing conversion std::cout << "number4 : " << number4 << std::endl;
运行结果为:
number4 : 1.924e+08
2.2 科学计数法
double number5 {192400023}; double number6 {1.92400023e8}; double number7 {1.924e8}; // Can ommit the lower 00023 // for simplicity if our application allows that. double number8 {0.00000000003498}; double number9 {3.498e-11}; // multiply with 10 exp(-11)
double number10{ -5.6 }; double number11{};//Initialized to 0 double number12{}; //Initialized to 0 //result:-inf double result { number10 / number11 }; //result:nan result = number11 / number12;
浙公网安备 33010602011771号