首页 > 编程知识 正文

double类型加减float类型,float类型和double类型的区别

时间:2023-05-05 23:06:43 阅读:270131 作者:3570

c++里的小数分为float和double两种类型, 这两种类型, 直接看代码, 及运行结果我们来看一下他们有什么区别:

#include "iostream"using namespace std;int main() {float tub = 10.0 / 3.0;double mint = 10.0 / 3.0;// 注意1.0E6之间不能有空格const float million = 1.0E6;cout << "tub = " << tub;// cout的默认输出是会把无效位(也就是末尾的0给去掉), 并可能// 采用科学计数法进行显示(这行代码就显示: “, a million tubs = 3.33333e+06”)cout << ", a million tubs = " << million * tub;// 这行代码就强制让cout输出原始数据例如:333333.250000cout.setf(ios_base::fixed, ios_base::floatfield);cout << ", after translate a million tubs = " << million * tub;cout << ", n and ten million tubs = ";cout << 10 * million * tub << endl;cout << "mint = " << mint << " and a million mints = ";cout << million * mint << endl;return 0;}

再来看代码的运行结果:

接下来分析一下代码, 代码逻辑很简单, 这里只说一行:

cout.setf(ios_base::fixed, ios_base::floatfield);

这行代码就强制让cout输出原始数据例如:333333.250000, 而不是cout默认的那种输出3.33333e+06这种格式, 仅仅是为了好对float和double的结果进行对比

通过运行结果我们能看的出来:

tub 和 mint还都算是精确, 但是把他们放大1000000后发现tubs已经不精确了, 而mints还算是精确, 

我们可以看出来, 在该系统中,  将tub*1000000后的结果为3333333.250000, 也就是不再精确, 但是保证了7位有效位, 也就是小数点后能保证6位是精确的(如果tub * 1000000 * 10 结果就更不精确了, 说明了float的精确度是有限的), 与之相比, double能至少保证13位是有效的,  因此相比而言double更精确一点.
在程序中默认情况下1.23和1.23E8都存储为double类型(个人觉得是更精确), 如果希望常量存储为float类型, 需要在常量后面加上f或F, 例如1.23f, 如果要存储为long double类型, 则可以使用l或L后缀:

1.23f   float类型;     1.23E5F  float类型,   1.23E4 double类型,   1.23L long double类型

 

我们再来看另一个例子:

#include "iostream"using namespace std;int main() {float a = 1.23E10;float b = a + 1.0f;cout.setf(ios_base::fixed, ios_base::floatfield);cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "b - a = " << b - a << endl;}

运行结果:

从这里虽然b比a多了1, 但是由于float只能精确到第6, 7位, 所以多加的1对于b来说等于没有, 因此他们的相减的结果为0,  这也进一步说明了float的不精确

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。