Tag: exp

快速计算:可以在不损失太多性能的情况下提高准确性?

我正在尝试快速的Exp(x)函数, 这个函数之前在这个回答中描述了一个关于提高C#计算速度的SO问题: public static double Exp(double x) { var tmp = (long)(1512775 * x + 1072632447); return BitConverter.Int64BitsToDouble(tmp << 32); } 该表达式使用了一些IEEE浮点“技巧”,主要用于神经集。 该函数比常规Math.Exp(x)函数快约5倍。 不幸的是,相对于常规Math.Exp(x)函数,数值精度仅为-4% – + 2%,理想情况下,我希望精度至少在亚百分比范围内。 我已经绘制了近似和常规Exp函数之间的商,并且从图中可以看出,相对差异似乎以几乎恒定的频率重复。 是否有可能利用这种规律性来进一步提高“快速曝光”function的准确性,而不会显着降低计算速度,或者精度提高的计算开销是否会超过原始表达式的计算增益? (作为旁注,我也尝试过在同一个SO问题中提出的一种替代方法,但这种方法在C#中似乎没有计算效率,至少在一般情况下并非如此。) 5月14日更新 根据@Adriano的要求,我现在已经执行了一个非常简单的基准测试。 我已经使用每个替代exp函数对[-100,100]范围内的浮点值执行了1000万次计算。 由于我感兴趣的值范围从-20到0,我还明确列出了x = -5处的函数值。 结果如下: Math.Exp: 62.525 ms, exp(-5) = 0.00673794699908547 Empty function: 13.769 ms ExpNeural: 14.867 ms, exp(-5) = 0.00675211846828461 ExpSeries8: 15.121 […]