<highlightsyntax language="PHP"> // Quadratic Solver for PHP by Gazza 2004-03-21 // Useage: for 3x^2 + 4x + 5 = 0, use quadratic(3, 4, 5, 'root1') and quadratic(3, 4, 5, 'root2'), // or simply just quadratic(3, 4, 5, 'both'). // The \$root argument doesn't define which value it will be in relation to the other - I could // easily have called them John and Jane, instead of 1st and 2nd. // function quadratic(\$a, \$b, \$c, \$root) { \$precision = 3; // Change this value for a different decimal places rounding.

\$bsmfac = \$b*\$b-4*\$a*\$c; if (\$bsmfac < 0) { // Accounts for complex roots. \$plusminusone = " + "; \$plusminustwo = " - "; \$bsmfac *=-1; \$complex=(sqrt(\$bsmfac)/(2*\$a)); if (\$a < 0){ //if negative imaginary term, tidies appearance. \$plusminustwo = " + "; \$plusminusone = " - "; \$complex *= -1; } // End if (\$a < 0) \$lambdaone = round(-\$b/(2*\$a), \$precision).\$plusminusone.round(\$complex, \$precision).'i'; \$lambdatwo = round(-\$b/(2*\$a), \$precision).\$plusminustwo.round(\$complex, \$precision).'i'; } // End if (\$bsmfac < 0)

else if (\$bsmfac == 0) { // Simplifies if b^2 = 4ac (real roots). \$lambdaone = round(-\$b/(2*\$a), \$precision); \$lambdatwo = round(-\$b/(2*\$a), \$precision); } // End else if (bsmfac == 0)

else { // Finds real roots when b^2 != 4ac. \$lambdaone = (-\$b+sqrt(\$bsmfac))/(2*\$a); \$lambdaone = round(\$lambdaone, \$precision); \$lambdatwo = (-\$b-sqrt(\$bsmfac))/(2*\$a); \$lambdatwo = round(\$lambdatwo, \$precision); } // End else

// Return what is asked for. if (\$root == 'root1') {return \$lambdaone;} if (\$root == 'root2') {return \$lambdatwo;} if (\$root == 'both') {return \$lambdaone. ' and ' .\$lambdatwo;} } // End function </highlightsyntax>

### Tcl

```package require math::complexnumbers

proc quadratic {a b c} {
set 2a [expr {\$2*\$a}]
set delta [expr {\$b**2 - 4*\$a*\$c}]
set roots {}
if {\$delta < 0} {
set x1 [expr {(-1.0*\$b) / \$2a}]
set x2 [expr {sqrt(abs(\$delta)) / \$2a}]
lappend roots [tostring [complex \$x1 \$x2]] \
[tostring [complex \$x1 [expr {-1 * \$x2}]]]
} elseif {\$delta == 0} {
lappend roots [expr {-1.0*\$b / \$2a)}]
} else {
lappend roots [expr {(-1*\$b + sqrt(\$delta)) / \$2a}] \
[expr {(-1*\$b - sqrt(\$delta)) / \$2a}]
}
return \$roots
}
```