<?php
/**
 * Quadratic Solver Function for PHP
 *
 * 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.
 *
 * @author Gary Jones <gary@garyjones.co.uk>
 * @version 2004-03-21
*/
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;}
}
echo 
'For the quadratic 5x<sup>2</sup>-2x+3=0 the roots are ' .quadratic(5, -23'both');
?>