MATLAB Answers

## Error in implemented function

Asked by Nik joung

### Nik joung (view profile)

on 14 Nov 2017
Latest activity Commented on by Nik joung

### Nik joung (view profile)

on 15 Nov 2017
Accepted Answer by Michal Kvasnicka

### Michal Kvasnicka (view profile) Hello,
I have the function written above. It was calculated by WolframAlpha and the result is 0.
I've tried to implement the formula in Matlab with the code below:
tmp=0;
for s=0:24
if (48-s >= 24)
bin1 = nchoosek(48-s,24);
else
bin1 = 0;
end
if (47-s >= 24)
bin2 = nchoosek(47-s,24);
else
bin2 = 0;
end
tmp = tmp + (-1)^s * nchoosek(24,s) * (bin1-bin2);
end
But my code outputs (variable tmp) the result -2 instead of 0. I am not seeing, where the mistake is.
I would appreciate, if someone could help me.

#### 0 Comments

Sign in to comment.

## 1 Answer

Answer by Michal Kvasnicka

### Michal Kvasnicka (view profile)

on 14 Nov 2017
Edited by Michal Kvasnicka

### Michal Kvasnicka (view profile)

on 14 Nov 2017
Accepted Answer

The double precision (default numerical values class in Matlab) is not enough for this kind of computation!!! You need to use symbolic math toolbox, to get multi-precision accuracy. Wolfram alpha (with Mathematica engine) using this approach by default.
Just a simple code using matlab symbolic toolbox: tmp = 0 !!!
tmp=sym(0);
syms s
for s=0:24
bin1 = nchoosek(sym(48)-s,sym(24));
bin2 = nchoosek(sym(47)-s,sym(24));
aux = (-1)^s * nchoosek(sym(24),s) * (bin1-bin2);
tmp = tmp + aux;
end
tmp
But you must know, that symbolic computations are significantly slower than numerical computations (double class).

#### 2 Comments

Stephen Cobeldick

### Stephen Cobeldick (view profile)

on 14 Nov 2017
+1 nice explanation.
Nik joung

### Nik joung (view profile)

on 15 Nov 2017
Thank you, for your nice explanation! It helps me a lot to get behind such problems.
And if I want to do further calculations with the result, I just use the double()-function on the resulting sym-variable.

Sign in to comment.