C,舍入问题。 UWORD,彗星和双打

时间:2013-01-21 14:19:01

标签: c arithmetic-expressions

关于这些操作的结果,我有几个问题。

首先,如果我有两个整数并将它们分开并将结果保存为double。是否存在任何舍入问题,使1/2等于.5而不是1.

double ratio = int1/int2;

第二,如果我现在有这个比例并乘以一个UWORD就会出现问题吗?

UWORD word1 = 4098;
UWORD word2 = ratio * word1; 

顺便说一句,当我这样做时,我会收到编译器警告

 narrowing or signed-to-unsigned type conversion found: double to unsigned short

1 个答案:

答案 0 :(得分:1)

您需要将int1强制转换为double,以便编译器知道使用浮点计算(而不是整数计算):

double ratio = ((double) int1) / int2;

要在ration * word1中存储UWORD的浮点计算,需要再次投射(以防止出现警告):

UWORD word2 = (UWORD) (ratio * word1);

注意:这会砍掉小数,如果你需要适当的舍入,请尝试math.h,{{1}}。 (再次,适当的铸造!)