如果我调用C,数学库中的数学函数“trunc”定义为:
extern double trunc _PARAMS((double));
在我的主要档案里叫它:
int i = (int)trunc(2.5);
很好,没问题。但如果我想被动地通过双关,就像:
double d = 2.5;
int i = (int)trunc(d);
不管用?!?在我的微处理器STM32F4 IDE中,它以调试器模式进入:
Infinite_Loop:
b Infinite_Loop
然后它就卡在那里了。我也改变了双,并尝试浮动,int,unit8_t,.没人不工作。另外,其他数学函数也可以正常工作,我这样
有什么明智的办法来解决这个问题吗?
uint32_t a = 16637510;
uint32_t b = 45627362;
uint32_t c = 0;
c = a * 100000 / b //overflows
c = (a * 100/b)*1000 //gives 36000
我需要得到结果c= 36463或更高36464。并且需要快速、非浮点操作。CPU是stm32f4
更新:
接受的答案是将100000转换为100000ULL (64位),但正如@PeterJ所建议的(并删除了他的答案),使用stm32f4 FPU比64除法操作更快。
Timer t;
int i;
t.st
我知道已经有类似的问题了,但是给出的建议并没有真正的帮助。我想用我的新的Teensy 3.6控制一个伺服电机。如果我编译我的草图,会出现一个错误: In file included from C:\Users\Michael\Desktop\servo_test\servo_test.ino:1:0:
C:\Users\Michael\Documents\Arduino\libraries\Servo\src/Servo.h:75:2: error: #error "This library only supports boards with an AVR, SAM, SAMD,