我有一个函数,需要使用浮点数进行计算,并且希望在返回结果时保留尽可能多的精度。我了解到,当你将两个浮点数相乘时,会增加有效数字的位数。
因此,当两个浮点数相乘时,比如
在我的示例函数中,我是否需要强制转换?如果需要,在哪里进行转换?由于这是一个紧密的内部循环,如果我在每个变量
因此,当两个浮点数相乘时,比如
float e, f;
并且我执行double g = e * f
时,位数何时被截断呢?在我的示例函数中,我是否需要强制转换?如果需要,在哪里进行转换?由于这是一个紧密的内部循环,如果我在每个变量
a b c d
使用时都加上static_cast<double>(x)
, 我会得到5-10% 的减速。但我怀疑我不需要单独转换每个变量,只需在某些位置上转换即可(如果需要)。或者在这里返回double是否会给我任何好处,我同样可以返回float?double func(float a, float b, float c, float d) {
return (a - b) * c + (a - c) * b;
}
double
,可能会获得更好的性能(无论如何也会获得更好的准确性)。这样可以节省转换开销。 - 5gon12eder