C语言在32位编译系统,double强转int得到的值减1

一个简单的C程序测试,在32位编译系统下和64位编译系统下得到的结果不一样。
代码如下:

#include <stdio.h>
#include <stdint.h>
int main()
{
    double time = 0.019;
    unsigned int rate = 48000;
    int num = 8;
    int32_t res = 0;
    res = (int32_t)(rate * time / num);
    printf("%d\n", res);
    return 0;
}

正常输出应该为114,但是在32位系统编译下执行结果为113,在64位系统编译执行结果为114,大家可以试一试。
请问这是什么原因呢?求大佬告知。

这很正常。因为浮点数存在误差。比如 114,它算出来可能是 113.9999999999 也可能是 114.000000001
而int并非四舍五入,而是直接舍取尾数,所以如果是 113.99999999,那么就是113了。
你可以这么写
res = (int32_t)(0.5 + rate * time / num);