任何人都可以解释这个功能的作用吗
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,皮特
我试图通过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)