长期的算术

时间:2012-02-02 22:08:50

标签: c long-long

我在C中有以下内容:

long long int a;
long long int b;
long long int c;
long long int d=a*b/c;

然而,我希望'd'加倍。有没有办法可以繁殖,除了long long int并得到一个double作为答案,保持最多3位小数作为精度?

由于

4 个答案:

答案 0 :(得分:2)

long long int中的一个投放到double

double d = a * (double)b / c;

答案 1 :(得分:1)

如果你的数字不会溢出,如果你这样做,你可以将所有内容都加倍1000.另外,请确保在除以之前总是将事物相乘。您可以转换为double,但可能会丢失信息。

答案 2 :(得分:0)

由于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类型中完成。

答案 3 :(得分:-1)

double d = double(a) * double(b) / double(c);得到一个浮点结果。 (你实际上只需要一个元素作为double来促进所有事情,但为什么不明确。)你得到双精度浮点的通常精度(即你不要不能选择“精确等级”。)

您确定需要浮动点算术(即您的问题是否需要多个比例)?也许定点算术更适合你的情况。