在PIC上使用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。 知道是什么导致了这个问题,我怎么能纠正它?
谢谢
默认情况下,xc16将double和float作为32位数据类型处理。 您需要提供编译选项-fno-short-double
以使用64位双精度数。
您也可以使用long double
作为数据类型,但我现在无法编译来validation。
(作为测试,5,471,873,794,048也正是您使用float
而不是double
在x86上编译示例代码的结果)