以部门为单位的类型转换
Type conversion in divisions
我目前想知道为什么以下操作 20/(10.0/6( 在使用 C++ 时导致 12(双精度(。 10.0 是双精度,20 和 6 是整数。(10.0/6( 的结果是 1.66,因为 6 首先变成了双精度。但是为什么 20/1.66 然后是 12 而不是 12.05?
示例程序:
#include <iostream>
using namespace std;
int main()
{
cout << "20 / (10.0 / 6): " << (20 / (10.0 / 6)) << endl;
return 0;
}
示例会话(gcc,cygwin,Windows 10 - 64位(:
$ echo -e '#include <iostream>
> using namespace std;
> int main()
> {
> cout << "20 / (10.0 / 6): " << (20 / (10.0 / 6)) << endl;
> return 0;
> }
> ' > test-div.cc
$ g++ -o test-div test-div.cc
$ ./test-div.exe
20 / (10.0 / 6): 12
第一件事是 12 是表达式的真实值:
20 20 * 6 120
20 / (10.0 / 6) = ------ = -------- = ------ = 12
10 10 10
----
6
第二件事是浮点具有有限的精度。Double 有 52 位尾数,接近 16 位十进制数字。
所以十进制值 10/6 接近 1.6666666666666667。但在内部它是二进制数 - 接近1.66666666666666667406815349750104360282421112060547 如果我们可以直接用十进制表示二进制 - 我们不能。
上面的等式计算结果非常接近 12,这就是返回的内容 - 甚至是双倍。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 将类指针类型转换为键时出错
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 如何使用C++将.trc文件类型转换为文本文件?
- 从基本类型转换为非 POD 结构
- 有没有办法将字符类型转换为整数?
- 如何将字符串类型转换为 ostringstream
- 将可变参数模板类型转换为 void,预期')'之前
- 在 c++ 中将结构类型转换为无符号字符*
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 复制初始化 - 从 'int' 类型转换为非标量类型
- 在 opencv 上将 vec 类型转换为标量类型
- 将函数指针类型转换为相应的字符串
- 整数在 C++ 中没有被类型转换为布尔值
- 为什么可以将所有类型转换为其他指针类型?