我在C:中有以下内容
long long int a;
long long int b;
long long int c;
long long int d=a*b/c;
不过,我希望"d"是双倍的。有没有一种方法可以让我乘,除long-long-int,得到一个双精度的答案?
感谢
将(至少)一个long long int
转换为double
double d = a * (double)b / c;
如果你这样做,你的数字不会溢出,你可以把所有的数字都乘以1000。此外,一定要在除以事物之前先乘以事物。您可以转换为double,但它可能会丢失信息。
由于C表达式(包括子表达式)的计算通常不考虑它们出现的上下文,因此将使用整数算术来计算子表达式a*b/c
,这意味着截断除法。
如果要对整数值执行浮点运算,则需要将它们转换为浮点类型。这应该适用于您的情况:
long long int a;
long long int b;
long long int c;
/* Assign values to a, b, and c (!) */
double d = (double)a * b / c;
请注意,仅转换第一个操作数就足以在类型double
中完成乘法和除法。
说double d = double(a) * double(b) / double(c);
得到浮点结果。(实际上,您只需要一个元素作为double
就可以提升所有内容,但为什么不显式呢?)您可以获得双精度浮点的通常精度(即,您不必选择"精度级别")。
您确定需要浮点点算术(即您的问题是否需要多个刻度)?也许定点算术更适合你的情况。