我在C中有以下代码:
long long int a;
long long int b;
long long int c;
long long int d=a*b/c;但是,我希望'd‘是双倍的。有没有一种方法,我可以乘以,除以long long int,并得到一个双精度值作为答案,同时保持3位小数的精度?
谢谢
发布于 2012-02-03 06:13:26
将long long int中的一个转换(至少)为double
double d = a * (double)b / c;发布于 2012-02-03 06:11:24
如果你这样做,你的数字不会溢出,你可以把所有东西都乘以1000。此外,请确保在除以对象之前始终将对象相乘。您可以转换为双精度值,但它可能会丢失信息。
发布于 2012-02-03 06:14:22
由于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中完成乘法和除法。
https://stackoverflow.com/questions/9120746
复制相似问题