2

我在 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。知道是什么导致了这个问题,我该如何纠正它?

谢谢

4

1 回答 1

2

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

您也可以仅将long double其用作数据类型,但我目前无法编译以验证这一点。

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

于 2014-03-14T18:16:36.220 回答