C 将32位数字转换为16位或更少

C 将32位数字转换为16位或更少,c,optimization,floating-point,short,mbed,C,Optimization,Floating Point,Short,Mbed,在我的mbed LPC1768上,我在一个引脚上有一个ADC,当轮询时,它返回一个16位短数字,标准化为0-1之间的浮点值 因为它将其转换为浮点数,这是否意味着它的32位?因为我的数字是小数点后六位的数字 我正在运行自相关,我想减少完成分析所需的时间。 浮点数为32位长是否正确?如果是,两个32位浮点数相乘所需的时间比两个16位短值(非十进制)数相乘要长得多是否正确 我正在用C编写mbed 干杯。如果处理器中不存在特殊硬件(浮点单元),则假定两个32位浮点数相乘所需时间比两个16位短值相乘所需时

在我的mbed LPC1768上,我在一个引脚上有一个ADC,当轮询时,它返回一个16位短数字,标准化为0-1之间的浮点值

因为它将其转换为浮点数,这是否意味着它的32位?因为我的数字是小数点后六位的数字

我正在运行自相关,我想减少完成分析所需的时间。 浮点数为32位长是否正确?如果是,两个32位浮点数相乘所需的时间比两个16位短值(非十进制)数相乘要长得多是否正确

我正在用C编写mbed


干杯。

如果处理器中不存在特殊硬件(浮点单元),则假定两个32位浮点数相乘所需时间比两个16位短值相乘所需时间更长,这是正确的。

我应该能够非常准确地对此作出评论。我曾经做过DSP处理工作,我们将代码“集成”,这实际上意味着我们将采用信号/音频/视频算法,并用定点算法(即:)取代所有浮点逻辑

在大多数现代系统中,与浮点算法相比,使用整数算法通常可以获得更好的性能,但代价是必须编写更复杂的代码

您正在使用的芯片(Cortex M3)没有:它只模拟浮点运算,因此浮点运算将非常昂贵(需要很多时间)

在您的情况下,您可以通过
read_u16()
读取16位值,然后将该值右移4次,就完成了。如果你正在使用音频数据,你可以考虑,这将比仅仅从4中截取12个数字来获得更好的主观性能。
,并可能在中表示。将一对32位值与一对16位值相乘可能需要相同的时间,这取决于使用的芯片以及FPU和ALU的存在。在你的芯片上,乘两个浮点数在时间上会非常昂贵。此外,如果将两个32位整数相乘,它们可能会溢出,因此,如果不想实现定点算法,则可能需要使用浮点逻辑。

您确定读对了吗?我看到的是“读取输入电压,表示为[0x0,0xFFFF]范围内的无符号短路”,这似乎非常清楚。
Read()
返回一个浮点数,但是
Read_u16()
返回一个16位整数,您可以选择要使用的整数。因此Read()返回一个32位浮点数,然后Read_u16()将返回16位整数,16位整数将执行得更快/更高?这是cortex-m3无浮点单元。m4确实有一些浮动支持。感谢您深入了解。我的理解是,位向右移动会使数字变小,但数字之间的关系保持不变(如果它们都是位移动的)。比特移位是否会提高性能,因为数字较小或是可以忽略不计,特别是如果考虑到开始调整数字所需的时间?Cheers@JamesDonnelly:整数乘所花费的时间不取决于操作数的值。“但是你需要处理溢出问题。”詹姆斯唐纳利很高兴这有帮助。如果您还有其他问题,请随时在评论中展开讨论。