def approx_exp(x): x = relay.minimum(relay.maximum(x, C((- 88.0))), C(88.0)) x = (C(127.0) + (x * C(1.44269504))) xf = relay.floor(x) i = relay.cast(xf, 'int32') x = (x - xf) Y = (C(0.99992522) + (x * (C(0.69583354) + (x * (C(0.22606716) + (x * C(0.078024523))))))) exponent = relay.left_shift(i, relay.expr.const(23, 'int32')) exponent = relay.reinterpret(exponent, 'float32') return (exponent * Y)
def approx_exp(x): # An approximation derived from Opus, # https://github.com/xiph/opus/blob/c1c247/celt/mathops.h#L147-L165 x = relay.minimum(relay.maximum(x, C(-88.0)), C(88.0)) x = C(127.0) + x * C(1.44269504) xf = relay.floor(x) i = relay.cast(xf, "int32") x = x - xf Y = C(0.99992522) + x * (C(0.69583354) + x * (C(0.22606716) + x * C(0.078024523))) exponent = relay.left_shift(i, relay.expr.const(23, "int32")) exponent = relay.reinterpret(exponent, "float32") return exponent * Y