在PIC上使用long long时的舍入问题

时间:2014-03-14 18:04:15

标签: c math rounding-error long-long

我在PIC单片机上进行简单的数学运算,在C中运行代码并使用MPLABX和xc16编译器。这是代码:

double mydouble = 0.019440;
long long int mypower = 281474976710656;

long long int result = mypower*mydouble;

打印出结果'给了我5,471,873,794,048;而它应该给5,471,873,547,255。知道是什么导致了这个问题,我怎么能纠正它?

由于

1 个答案:

答案 0 :(得分:2)

默认情况下,xc16将double和float作为32位数据类型处理。您需要提供编译选项-fno-short-double以使用64位双精度。

您也可以只使用long double作为数据类型,但我目前无法编译来验证。

(作为测试,5,471,873,794,048也是您使用float代替double在x86上编译示例代码的结果。