当我乘以 float * 12 时,以下代码不会产生我期望的答案。
void setup_timer_parameters(float micro_seconds)
{
//constants
calibration = 0;
//calculables
periods_needed = micro_seconds * 12 + calibration;
target_overflows = periods_needed / 65536;
overflows_counter = target_overflows;
temp = periods_needed - (target_overflows * 65536);
leftover = (long)temp;
//int overflows_needed = micro_seconds % timer_period;
printf(lcd_putc, "\fPN%05f TMP%05f\nTO%05f LO%05f", periods_needed, temp, target_overflows, leftover);
}
void main(){
setup_timer_parameters(20000F);
}
出于某种原因,我的显示屏显示 period_needed 是 -518!为什么不是 20000*12 = 240000?
最佳答案
您正在为嵌入式平台进行编译吗?
也许你的默认 int 只有 2 字节宽,在这种情况下 12 * 20000 会溢出。
关于c - C 中的浮点与整数数据类型计算问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352953/