c - IEEE 754 和浮点精度

标签 c floating-point cpu 32bit-64bit ieee-754

32 位或 64 位 CPU 在 IEEE 754 提供的精度方面有什么不同吗?

我的意思是在用 C 编程时,floatdoublelong double 的大小在 32 位或 64 位 CPU 之间是否不同.

最佳答案

在大多数使用 IEEE-754 的架构中,floatdouble 是精确的 32 位和 64 位类型,分别对应于单精度和 double 。因此,无论您使用的是 32 位还是 64 位计算机,精度都是一样的。异常(exception)情况是一些带有不符合标准的 C 编译器的微 Controller ,其中 doublefloat 相同并且包含 32 位

OTOH long double 支持因系统而异。在 x86 上,大多数实现将利用硬件 80-bit extended precision类型(通常填充到 12 或 16 字节以保持对齐),MSVC 除外,其中 long double is just an alias for double .在其他架构上,long double 通常被实现为

  1. double相同的类型,或者
  2. 128 位 IEEE 754-2008 quadruple precision , 或
  3. 128 位 double-double

虽然与 double 相比,第二种方式显着增加了范围和精度,但由于缺乏硬件支持,它通常也显着变慢

double-double 方法产生一个范围相同但精度是 double 两倍的类型,具有硬件 double 的优势> 支持,即您不需要像四倍精度那样完全在软件中实现。但是它不符合 IEEE-754

如果您在 上做大量数学运算或 ,迁移到 64 位会受益,因为寄存器数量增加,默认情况下 SSE2/Neon 可用...与 32 位版本相比,这提高了性能,不像大多数其他架构,64 位程序通常运行速度较慢,因为更大的指针。

关于c - IEEE 754 和浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839616/

相关文章:

创建一个 Rust 共享库,返回一个函数指针结构到 C 主程序

c - 在调用 lapack 子例程之前我们需要复制矩阵吗

c - GCC 部门截断(舍入问题)

linux - Linux 上有没有一些命令可以只输出 CPU 和内存使用情况?

php - FFMPEG 进程通过 PHP(FLV 视频转换)使用的 CPU 百分比较低

c - 在 C 中使用 sigaction 启用信号处理程序

c++ - 从 WAV 文件中获取实际值 C++

c++ - 如何防止C中的双重溢出?

java - 有没有办法获取java double中小数点后的位数?

linux - 在 (linux) 中获取 apache 的总 cpu 使用率