06.07.2013 Views

Scilab Bag Of Tricks - Claymore

Scilab Bag Of Tricks - Claymore

Scilab Bag Of Tricks - Claymore

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Chapter 4. Unknown Spots<br />

[p_red, q_red] = reduce_int(p0, q0)<br />

else<br />

p_red = p0<br />

q_red = q0<br />

end<br />

else<br />

[p_red, q_red] = reduce_int(p0, q0) – reduce_int defined in complete example<br />

end<br />

f = tlist([’frac’; ’num’; ’denom’], p_red, q_red)<br />

function s = %frac_p(f)<br />

// display function for fractions<br />

s = string(f)<br />

disp(s)<br />

//<br />

// addition<br />

//<br />

function r = %frac_a_frac(f1, f2)<br />

d1 = gcd_int(f1(’denom’), f2(’denom’))<br />

if d1 == 1 then<br />

r = frac(f1(’num’)*f2(’denom’) + f1(’denom’)*f2(’num’), ..<br />

f1(’denom’)*f2(’denom’))<br />

else<br />

t = f1(’num’)*(f2(’denom’) / d1) + f2(’num’)*(f1(’denom’) / d1)<br />

d2 = gcd_int(t, d1)<br />

r = frac(t/d2, (f1(’denom’) / d1)*(f2(’denom’) / d2))<br />

end<br />

//<br />

// conversion<br />

//<br />

function fl = frac2float(f)<br />

// convert a fraction to a floating point number<br />

fl = f(’num’) / f(’denom’)<br />

function s = %frac_string(f)<br />

// string( frac(...) )<br />

if f(’denom’) == 1 then<br />

s = sprintf(’%.0f’, f(’num’))<br />

else<br />

s = sprintf(’%.0f/%.0f’, f(’num’), f(’denom’))<br />

end<br />

After loading these definitions a new type named frac exists. It can be used like this:<br />

46

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!