2016-11-17 58 views
-1

考虑下面的代码:使用分数正确初始化双精度?

double foo; 
foo = 1/35; 

foo威尔然后等于0.02857142857(约1/35为十进制)或0(整数除法)?这个代码是否可移植,换句话说就是它的定义,保证的行为是,当将类似1/35的东西分配给double时,将执行浮点除法?

+0

它会产生一个零为整......你将整数和denom为比分子 –

+1

biiger“将foo的就等于......”你能不能测试? – juanchopanza

+0

结果将为0.您需要将其中一个操作数加倍。 – 2016-11-17 12:21:17

回答

0

你的代码正在做一个整数除法(它的右边)。 为了确保您进行适当的双重划分,分红和除数之一必须是双。

你可以解决它:

foo = 1d/35; 
+1

'foo = 1.0/35'是否是一个有效的选择? –

+1

@space_voyager它是在C#中(Console.WriteLine(1.0.GetType()。ToString())输出double),所以我假设它也会在C++中。如果可移植性是一个问题,我会坚持使用'd'后缀。 –

+1

这个问题是关于C++的。 Imho引用c或其他语言会误导人们认为“C中的工作必须在C++中工作”,并且这不是真的,通常 – user463035818