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
精度由于在声明变量的时候规定了不同的类型而产生了不同的精度损失。
另一个精度损失的例子(narrow conversion):
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)
2.3 无穷大和Nan
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;
 
posted @ 2023-12-09 22:25  Sternenhimmel1997  阅读(63)  评论(0)    收藏  举报