0

我在 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

4 回答 4

2

将(至少)其中一个long long ints 转换为double

double d = a * (double)b / c;
于 2012-02-02T22:13:26.200 回答
1

如果这样做不会使您的数字溢出,则可以将所有内容乘以 1000。此外,请确保在除以之前始终将事物相乘。您可以转换为双精度,但它可能会丢失信息。

于 2012-02-02T22:11:23.550 回答
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;

请注意,仅转换第一个操作数就足以使乘法和除法都在 type 中完成double

于 2012-02-02T22:14:21.843 回答
-1

double d = double(a) * double(b) / double(c);要得到一个浮点结果。(实际上,您只需要一个元素即可double提升所有内容,但为什么不明确。)您可以获得双精度浮点的通常精度(即您无法选择“精度级别”)。

你确定你需要浮点运算(即你的问题需要多个尺度)吗?也许定点算术更适合您的情况。

于 2012-02-02T22:12:52.523 回答