Tag: 定点

将两个64位整数乘以128位然后>>到64位的最快方法?

我需要将两个带符号的64位整数a和b相乘,然后将(128位)结果移位到带符号的64位整数。 最快的方法是什么? 我的64位整数实际上代表fmt小数位的定点数。 选择fmt使得a * b >> fmt不应该溢出,例如abs(a) < 64<<fmt和abs(b) < 2<<fmt , fmt==56将永远不会溢出64位作为最终结果将是< 128<<fmt ,因此适合int64。 我想这样做的原因是快速准确地评估forms的五次多项式((((c5*x + c4)*x + c3)*x + c2)*x + c1)*x + c0在不动点格式,每个数字都是带有fmt小数位的带符号的64位定点数。 我正在寻找实现这一目标的最有效方法。

为什么C99中不包含定点类型?

值得庆幸的是, complex类型修饰符被引入C99标准。 我不明白为什么决定省略对定点运算的支持(特别是支持分数类型,如1.15 {signed}或0.32 {unsigned}),这些类型对DSP编程如此重要? GCC是否通过扩展支持这些?

固定点乘法,没有64位临时

嗨我正在为嵌入式系统实现一些定点数学的东西,我试图将两个16.16定点数相乘,而不创建64位临时数。 到目前为止,我提出的代码生成的指令最少。 int multiply(int x, int y){ int result; long long temp = x; temp *= y; temp >>= 16; result = temp; return result; } 这段代码的问题在于它使用了一个临时的64位整数,这似乎会产生错误的汇编代码。 我正在尝试使用两个32位整数而不是64位整数的系统。 有人知道怎么做吗?

C编程中的不动点算法

我正在尝试创建一个高精度存储股票价格的应用程序。 目前我正在使用双倍这样做。 为了节省内存,我可以使用任何其他数据类型吗? 我知道这与定点运算有关,但我无法弄明白。

如何将浮点C代码转换为定点?

我有一个使用双打的C代码。 我希望能够在DSP( TMS320 )上运行代码。 但DSP不支持双精度数,只支持定点数。 将代码转换为定点的最佳方法是什么? 是否有一个很好的C库用于定点数(实现为整数)?

快速定点pow,log,exp和sqrt

我有一个固定点类(10.22),我需要一个pow,一个sqrt,一个exp和一个日志函数。 唉,我不知道从哪里开始。 任何人都可以提供一些有用的文章的链接,或者,还没有,给我提供一些代码? 我认为,一旦我有了exp函数,那么实现pow和sqrt变得相对容易。 pow(x,y)=> exp(y * log(x))sqrt(x)=> pow(x,0.5) 它只是那些我发现很难的exp和日志函数(好像我记得我的一些日志规则,我记不起其他的很多了)。 据推测,顺便说一句,对于sqrt和pow也会有一个更快的方法,所以即使只是说使用我在上面概述的方法:)前面的任何指针都会受到赞赏:) 请注意:这是跨平台和纯C / C ++代码,所以我不能使用任何汇编程序优化。