haskell - How am I computing e^x incorrectly? -


i trying estimate e^x using power series approximation in haskell.

import data.function  -- take 2 integers , divide them , return float result. -- 1/2 0.5 fd :: int -> int -> double fd = (/) `on` fromintegral  -- helper function compute factorial fact :: int -> int fact 1 = 1 fact n = n * fact (n-1)  -- calculate e^x using power series e^x (n number of -- of terms used approximate e^x computehelper :: double -> int -> double -> double computehelper x 0 res = res + 1 computehelper x n res = computehelper x (n-1) (res + (x**n `fd` (fact n)))  compute :: double -> int -> double compute x n = computehelper x n 0.0 

calling compute 1 5 gives 6. incorrect.

both fd , fact appear working fine. therefore, i'm guessing issue computehelper. however, following same logic in python:

from math import factorial  def compute(x, n, res=0):     if n == 0:         return res + 1     return compute(x, n-1, res + (x**n*1.0/(factorial(n))))  print compute(1, 5) 

i 2.71666666667 expected, confused why haskell version doesn't work.

its operator precedence issue. fd has higher precedence **. if add parenthesis clearer why getting 6:

(x**(n `fd` (fact n))) 

the way fix put parenthesis around exponentiation , tweak things bit typecheck:

((x^n) / (fromintegral (fact n))) 

Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -