Roots of a function: Difference between revisions

Content added Content deleted
m (oct...)
Line 474: Line 474:


x += step</lang>
x += step</lang>

=={{header|Tcl}}==
This simple brute force iteration marks all results, with a leading "~", as approximate.
<lang Tcl>
proc froots {lambda {start -3} {end 3} {step 0.0001}} {
set res {}
set lastsign [sgn [apply $lambda $start]]
for {set x $start} {$x <= $end} {set x [expr {$x + $step}]} {
set sign [sgn [apply $lambda $x]]
if {$sign ne $lastsign} {lappend res [format ~%.11f $x]}
set lastsign $sign
}
return $res
}
proc sgn x {expr {($x>0) - ($x<0)}}

froots {x {expr {$x**3 - 3*$x**2 + 2*$x}}}
</lang>
Result and timing:
<pre/Tcl $ time ./froots.tcl
~0.00000000000 ~1.00000000000 ~2.00000000000

real 0m0.368s
user 0m0.062s
sys 0m0.030s</pre>