C++ 浮点与定点:优缺点是什么?

C++ 浮点与定点:优缺点是什么?,c++,c,processor,video-game-consoles,C++,C,Processor,Video Game Consoles,浮点数类型表示一个数字,它将其有效数字和指数分别存储在单独的二进制字上,以适合16、32、64或128位 定点类型以负指数、2^-1、2^-2、2^-3等形式存储带有两个字的数字,一个表示整数部分,另一个表示超过基数的部分 浮点数更好,因为它们在指数意义上具有更宽的范围,但如果想要在某个范围内以更高的精度存储数字,例如仅使用-16到16之间的整数,从而使用更多的位来保存超过基数的数字,则浮点数就不会更好 就性能而言,哪一个性能最好,或者是否存在一些性能比另一个更快的情况 在视频游戏编程中,是否每

浮点数类型表示一个数字,它将其有效数字和指数分别存储在单独的二进制字上,以适合16、32、64或128位

定点类型以负指数、2^-1、2^-2、2^-3等形式存储带有两个字的数字,一个表示整数部分,另一个表示超过基数的部分

浮点数更好,因为它们在指数意义上具有更宽的范围,但如果想要在某个范围内以更高的精度存储数字,例如仅使用-16到16之间的整数,从而使用更多的位来保存超过基数的数字,则浮点数就不会更好

就性能而言,哪一个性能最好,或者是否存在一些性能比另一个更快的情况

在视频游戏编程中,是否每个人都使用浮点运算,是因为FPU使其速度更快,还是因为性能下降可以忽略不计,还是他们自己制作固定类型


为什么C/C++中没有任何固定类型?

该定义涵盖了非常有限的固定点实现子集

更正确的说法是,在固定点中,只存储尾数,而指数是先验确定的常数。不要求二进制点落在尾数内,也不要求它落在单词边界上。例如,以下所有内容都是“固定点”:

  • 64位尾数,按2-32缩放(这符合问题中列出的定义)
  • 64位尾数,按2-33缩放(现在整数和小数部分不能用八位字节边界分隔)
  • 32位尾数,按24缩放(现在没有小数部分)
  • 32位尾数,按2-40缩放(现在没有整数部分)
GPU倾向于使用不带整数部分的定点(通常是按2-32缩放的32位尾数)。因此,OpenGL和Direct3D等API通常使用能够保存这些值的浮点类型。但是,处理整数尾数通常更有效,因此这些API也允许以这种方式指定坐标(在纹理空间、颜色空间等中)


<>你对于C++没有固定点类型的说法,我不同意。C++中的所有整数类型都是固定点类型。指数通常假定为零,但这不是必需的,我有相当多的定点DSP代码,以C++的方式实现。

< P>浮点与整数数学之间的差别取决于你所考虑的CPU。在英特尔芯片上,时钟信号的差别不大。Int-math更快,因为有多个整数ALU可以并行工作。编译器还可以使用特殊的地址计算指令在单个指令中优化加法/乘法运算。转换也算作一种操作,所以只需选择您的类型并坚持下去


在C++中,你可以为定点数学建立自己的类型。您只需使用一个int定义为struct并重写适当的重载,并使它们执行正常的操作,再加上一个移位,将逗号放回正确的位置

定点广泛应用于DSP和嵌入式系统中,其中目标处理器通常没有FPU,使用整数ALU可以合理有效地实现定点

就性能而言,这可能会因目标体系结构和应用程序而异。显然,若并没有FPU,那个么定点速度会快得多。当您有FPU时,它也将取决于应用程序。例如,如果指令集中直接支持sqrt()或log()等函数,而不是通过算法实现thna,则执行这些函数的速度会快得多

C或C++中没有内置的固定点类型,因为它们(或至少C)被设想为系统级语言,而需要定点是特定于域的,而且可能是因为在通用处理器上通常不存在直接的定点硬件支持。


<>在C++中,用适当的运算符重载和相关的数学函数定义定点数据类型类可以很容易地克服这一缺点。然而,对于这个问题有好的和坏的解决方案。这里可以找到一个很好的例子:。那篇文章中的代码链接已断开,但我跟踪到了

,在本文中讨论“精确性”时需要小心

对于表示法中相同数量的位,最大固定点值的有效位比任何浮点值都多(因为浮点格式必须将一些位传递给指数),但最小固定点值的有效位少于任何非规范化浮点值(因为固定点值在前导零中浪费了大部分尾数)

此外,根据将定点数字除以的方式,浮点值可能能够表示较小的数字,这意味着它具有“微小但非零”的更精确表示


以此类推。

在代码级别,定点算法只是带有隐含分母的整数算法

对于许多简单的算术运算,定点运算和整数运算本质上是相同的。但是,有些运算的中间值必须用更高的位数表示,然后四舍五入。例如,要将两个16位定点数相乘,结果必须在e重新规范化(或饱和)回到16位定点

当软件没有利用矢量化(如基于CPU的SIMD或GPGPU)时,整数和定点算法比FPU更快。当使用矢量化时,矢量化的效率更重要,因此定点和浮点之间的性能差异不大

一些体系结构为ce提供硬件实现