考虑下面的代码:使用分数正确初始化双精度?
double foo;
foo = 1/35;
foo
威尔然后等于0.02857142857
(约1/35为十进制)或0
(整数除法)?这个代码是否可移植,换句话说就是它的定义,保证的行为是,当将类似1/35的东西分配给double时,将执行浮点除法?
考虑下面的代码:使用分数正确初始化双精度?
double foo;
foo = 1/35;
foo
威尔然后等于0.02857142857
(约1/35为十进制)或0
(整数除法)?这个代码是否可移植,换句话说就是它的定义,保证的行为是,当将类似1/35的东西分配给double时,将执行浮点除法?
你的代码正在做一个整数除法(它的右边)。 为了确保您进行适当的双重划分,分红和除数之一必须是双。
你可以解决它:
foo = 1d/35;
'foo = 1.0/35'是否是一个有效的选择? –
@space_voyager它是在C#中(Console.WriteLine(1.0.GetType()。ToString())输出double),所以我假设它也会在C++中。如果可移植性是一个问题,我会坚持使用'd'后缀。 –
这个问题是关于C++的。 Imho引用c或其他语言会误导人们认为“C中的工作必须在C++中工作”,并且这不是真的,通常 – user463035818
它会产生一个零为整......你将整数和denom为比分子 –
biiger“将foo的就等于......”你能不能测试? – juanchopanza
结果将为0.您需要将其中一个操作数加倍。 – 2016-11-17 12:21:17