C 和 C++ 中长双倍和双精度的区别
Difference between long double and double in C and C++
可能的重复项:
长双与双
我是编程新手,无法理解 C 和 C++ 中长双精度和双精度之间的区别。我试图谷歌它,但无法理解它并感到困惑。任何人都可以帮忙。?
引用C++标准 §3.9.1 ¶8:
有三种浮点类型:浮点型、双精度型和长型双精度型。双精度型至少提供与浮点数一样多的精度,而长型双精度型提供的精度至少与双精度一样多。浮点型的值集是双精度类型的值集的子集;双精度类型的值集是长双精度类型的值集的子集。浮点类型的值表示形式是实现定义的。整型和浮点型统称为算术类型。标准模板 std::numeric_limits (18.3( 的专用化应指定实现的每个算术类型的最大值和最小值。
也就是说,double
至少需要与float
一样多的内存,long double
至少与double
一样多的内存。该额外内存用于更精确地表示数字。
在 x86 系统上,float
通常为 4 个字节长,可以存储大至 3×10³⁸ 和小至 1.4×10⁻⁴⁵ 的数字。它是一个 IEEE 754 单精度数字,存储小数的大约 7 个十进制数字。
同样在 x86 系统上,double
长度为 8 字节,可以存储 IEEE 754 双精度格式的数字,该格式具有更大的范围和更高精度的数字,大约 15 个十进制数字。在其他一些平台上,double
可能不是 8 个字节长,并且可能确实与单精度float
相同。
该标准只要求long double
至少与double
一样精确,所以有些编译器会简单地将long double
视为与double
相同。但是,在大多数x86芯片上,10字节扩展精度格式80位数字可以通过CPU的浮点单元获得,它提供比64位double
更高的精度,精度约为21个十进制数字。
一些编译器支持 16 字节(128 位(IEEE 754 四精度数字格式,具有更精确的表示形式和更大的范围。
这取决于您的编译器,但以下代码可以显示每种类型所需的字节数:
int main() {
printf("%dn", sizeof(double)); // some compilers print 8
printf("%dn", sizeof(long double)); // some compilers print 16
return 0;
}
long <type>
数据类型可能比<type>
数据类型保存更大的值,具体取决于编译器。
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- 高精度双精度的 Sprintf 格式化问题
- 浮点数和双精度之间的区别
- C++ 中双精度和长双精度之间的区别
- SIMD与包装和标量双精度的区别
- C 和 C++ 中长双倍和双精度的区别