我有一个内联函数,做频率到周期的转换。计算精度必须使用long,而不是double类型。否则,可能会导致一些舍入错误。然后,函数将结果转换为double。我想知道在下面的代码中,哪一行将保持long类型的计算。无论参数条是100、100.0还是33.3333。
double foo(long bar)
{
return 1000000/bar;
return 1000000.0/bar;
return (long)1000000/bar;
return (long)1000000.0/bar;
}我自己试过了,第四行很管用。但只是想知道在这种情况下类型转换的概念。
编辑:
其中一个错误是1000000/37038 = 26,而不是26.9993。
发布于 2013-01-22 16:45:17
return 1000000/bar;这将把数学做得很长。
return 1000000.0/bar;这将把数学算作双倍。
return (long)1000000.0/bar;这相当于第一个
发布于 2013-01-22 16:46:17
第一行(第三行更详细地)将计算long ( C++中的whihc总是截断任何结果),然后将整值作为双倍返回。我不明白您在关于bar是33.3333的问题中说了什么,因为这不是一个可能的long值。
https://stackoverflow.com/questions/14463572
复制相似问题