moqiluo 2020-08-28 09:53 采纳率: 0%
浏览 140

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,大家可以试一试。
请问这是什么原因呢?求大佬告知。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-08-28 09:59
    关注

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

    评论

报告相同问题?