c++ - 为什么这种类型是 double 而不是 float?
问题描述
问题:在一个家庭作业问题中(它是用笔在纸上完成,所以没有编码)我必须确定在 C++ 中执行的加法的类型和值。
1 + 0.5
我的回答是:
- 输入浮点数(因为我认为
integer + float = float
) - 值 1.5(据我所知,当添加两种不同的数据类型时,添加的结果将转换为不丢失任何信息的数据类型。)
解决方案说:
- 类型:双
- 值:1.5
我的问题:为什么 0.5 是双精度而不是浮点数?如何区分浮点数和双精度数?我的意思是,0.5 在我看来就像一个浮点数和一个双精度数。
解决方案
首先,是的。integer
+ float
= float
。你对那部分是正确的。
问题不在于那个,而是你的假设0.5
是float
. 它不是。在 C++ 中,float 字面量后跟一个 f,意思0.5f
是 float。然而,0.5
实际上是一个double
. 这意味着您的方程式现在是:
integer + double = double
如您所见,这个结果是双倍的。这就是为什么您的问题的正确答案是结果类型是双精度的。
顺便说一句,为了清除记录,从技术上讲,这里发生的事情不是integer + double = double
. 正在发生的事情是1
正在接受隐式转换。本质上, the1
被转换为 a double
,因为操作的另一端也是 a double
。这样,计算机将添加相同的类型而不是不同的类型。这意味着这里发生的实际添加更像是:
double + double = double
推荐阅读
- sql - Oracle SQL - 使用 expdp/impdp 将数据从非分区(常规表)导入空分区表
- html - 如何制作表格以将邮件发送到某个地址?
- python - 在linux中从python的另一个目录打开文件
- r - 是否有 R 函数来执行 Ancova 事后检验以检查回归斜率的同质性
- php - 如何从 2D $_GET 中获取值?
- node.js - 为什么节点会抛出错误:在 package.json 中使用 type="module" 找不到模块 * 从 * 导入?
- sql - 获取与传入的员工属于完全相同位置列表的所有员工
- java - 读取文件时获取当前位置(索引)
- mysql - 如何使用 MySQL 表示分区上的组计数
- python - 如何在不损失精度的情况下有效地在 json 中编码一维 float32 numpy 数组?