小编Pet*_*ete的帖子

这个数学舍入函数如何工作?

任何人都可以解释这个功能的作用吗

static inline void round_to_zero(volatile float *f)
{
  *f += 1e-18;
  *f -= 1e-18;
}
Run Code Online (Sandbox Code Playgroud)

我的意思是除了添加1e-18并再次减去它,我明白了.但我不明白它会对传递给它的浮点数产生什么影响.我试图理解它的原因是我在一些使用此函数的代码中使用双精度(我已经从浮点数转换).它的音频代码和上面的函数来自这个库:

https://github.com/swh/lv2/blob/master/include/ladspa-util.h

我想知道它是否可以在双精度上工作,或者需要为双精度的额外精度进行修改.我怀疑这会击败最后几位数据,如果它们在那里就从浮动中删除它们,虽然我不太清楚如何.但我想如果这就是它的作用,我需要改变指数以适应双倍.

TIA,皮特

c math rounding

5
推荐指数
1
解决办法
217
查看次数

臂上延迟循环中每指令的周期

我试图通过arm-none-eabi-gcc来理解为stm32f103芯片组生成的一些汇编程序,它似乎只运行了我预期的一半速度.我对汇编程序并不熟悉,但是因为如果你想了解你的编译器正在做什么,每个人总是说要阅读asm,我看到我得到了多远.它的一个简单功能:

void delay(volatile uint32_t num) { 
    volatile uint32_t index = 0; 
    for(index = (6000 * num); index != 0; index--) {} 
}
Run Code Online (Sandbox Code Playgroud)

时钟速度是72MHz,上面的功能给我一个1ms的延迟,但我期望0.5ms(因为(6000*6)/ 72000000 = 0.0005).

汇编程序是这样的:

delay:
        @ args = 0, pretend = 0, frame = 16
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        sub     sp, sp, #16         stack pointer = stack pointer - 16
        movs    r3, #0              move 0 into r3 and update condition flags
        str     r0, [sp, #4]        store r0 at location …
Run Code Online (Sandbox Code Playgroud)

c assembly arm

5
推荐指数
1
解决办法
5472
查看次数

标签 统计

c ×2

arm ×1

assembly ×1

math ×1

rounding ×1