Nth root: Difference between revisions
Content added Content deleted
(Nth root en BASIC256) |
m (→{{header|Phix}}: syntax coloured) |
||
Line 2,414: | Line 2,414: | ||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
Main loop copied from AWK, and as per C uses pow_() instead of power() since using the latter would make the whole exercise somewhat pointless. |
|||
{{trans|AWK}} |
|||
<!--<lang Phix>(phixonline)--> |
|||
(main loop) |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
{{trans|C}} |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">pow_</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">)</span> |
|||
(use of pow_ instead of power)<br> |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">r</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> |
|||
<lang Phix>function pow_(atom x, integer e) |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">e</span> <span style="color: #008080;">do</span> |
|||
atom r = 1 |
|||
<span style="color: #000000;">r</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">x</span> |
|||
for i=1 to e do |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
r *= x |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">r</span> |
|||
end for |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
return r |
|||
end function |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">nth_root</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">eps</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1e-15</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- relative accuracy</span> |
|||
function nth_root(atom y,n) |
|||
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> |
|||
atom eps = 1e-15 -- relative accuracy |
|||
<span style="color: #008080;">while</span> <span style="color: #000000;">1</span> <span style="color: #008080;">do</span> |
|||
atom x = 1 |
|||
⚫ | |||
while 1 do |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span> <span style="color: #000000;">y</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">pow_</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">-</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">)</span> <span style="color: #0000FF;">/</span> <span style="color: #000000;">n</span> |
|||
⚫ | |||
<span style="color: #000000;">x</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">d</span> |
|||
atom d = ( y / pow_(x,n-1) - x ) / n |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">e</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">eps</span><span style="color: #0000FF;">*</span><span style="color: #000000;">x</span> <span style="color: #000080;font-style:italic;">-- absolute accuracy </span> |
|||
x += d |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">></span> <span style="color: #0000FF;">-</span><span style="color: #000000;">e</span> <span style="color: #008080;">and</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;"><</span> <span style="color: #000000;">e</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
atom e = eps*x -- absolute accuracy |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span> |
|||
if d > -e and d < e then exit end if |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">x</span> |
|||
end while |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
return {y,n,x,power(y,1/n)} |
|||
end function |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">test</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">yn</span><span style="color: #0000FF;">)</span> |
|||
?nth_root(1024,10) |
|||
<span style="color: #004080;">atom</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">yn</span> |
|||
?nth_root(27,3) |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"nth_root(%d,%d) = %.10g, builtin = %.10g\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nth_root</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">y</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">/</span><span style="color: #000000;">n</span><span style="color: #0000FF;">)})</span> |
|||
?nth_root(2,2) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
?nth_root(5642,125) |
|||
<span style="color: #7060A8;">papply</span><span style="color: #0000FF;">({{</span><span style="color: #000000;">1024</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">27</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">5642</span><span style="color: #0000FF;">,</span><span style="color: #000000;">125</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">4913</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">16</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">16</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">125</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1000000000</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1000000000</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">}},</span><span style="color: #000000;">test</span><span style="color: #0000FF;">)</span> |
|||
--?nth_root(7,0.5) -- needs power(), not pow_() |
|||
<!--</lang>--> |
|||
?nth_root(4913,3) |
|||
Note that a {7,0.5} test would need to use power() instead of pow_(). |
|||
?nth_root(8,3) |
|||
?nth_root(16,2) |
|||
?nth_root(16,4) |
|||
?nth_root(125,3) |
|||
?nth_root(1000000000,3) |
|||
?nth_root(1000000000,9)</lang> |
|||
{{out}} |
{{out}} |
||
Shows inputs and both the iterative and builtin results. |
|||
<pre> |
<pre> |
||
nth_root(1024,10) = 2, builtin = 2 |
|||
{1024,10,2,2} |
|||
nth_root(27,3) = 3, builtin = 3 |
|||
{27,3,3,3} |
|||
nth_root(2,2) = 1.414213562, builtin = 1.414213562 |
|||
nth_root(5642,125) = 1.071547592, builtin = 1.071547592 |
|||
nth_root(4913,3) = 17, builtin = 17 |
|||
{4913,3,17,17.0} |
|||
nth_root(8,3) = 2, builtin = 2 |
|||
{8,3,2,2} |
|||
nth_root(16,2) = 4, builtin = 4 |
|||
{16,2,4,4} |
|||
nth_root(16,4) = 2, builtin = 2 |
|||
{16,4,2,2} |
|||
nth_root(125,3) = 5, builtin = 5 |
|||
{125,3,5,5} |
|||
nth_root(1000000000,3) = 1000, builtin = 1000 |
|||
nth_root(1000000000,9) = 10, builtin = 10 |
|||
</pre> |
</pre> |
||