Fast Exp calculation: possible to improve accuracy without losing too much performance?

前端 未结 5 2091
难免孤独
难免孤独 2020-12-04 18:11

I am trying out the fast Exp(x) function that previously was described in this answer to an SO question on improving calculation speed in C#:

public static d         


        
5条回答
  •  我在风中等你
    2020-12-04 18:56

    I have studied the paper by Nicol Schraudolph where the original C implementation of the above function was defined in more detail now. It does seem that it is probably not possible to substantially approve the accuracy of the exp computation without severely impacting the performance. On the other hand, the approximation is valid also for large magnitudes of x, up to +/- 700, which is of course advantageous.

    The function implementation above is tuned to obtain minimum root mean square error. Schraudolph describes how the additive term in the tmp expression can be altered to achieve alternative approximation properties.

    "exp" >= exp for all x                      1072693248 -  (-1) = 1072693249
    "exp" <= exp for all x                                 - 90253 = 1072602995
    "exp" symmetric around exp                             - 45799 = 1072647449
    Mimimum possible mean deviation                        - 68243 = 1072625005
    Minimum possible root-mean-square deviation            - 60801 = 1072632447
    

    He also points out that at a "microscopic" level the approximate "exp" function exhibits stair-case behavior since 32 bits are discarded in the conversion from long to double. This means that the function is piece-wise constant on a very small scale, but the function is at least never decreasing with increasing x.

提交回复
热议问题