ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Listing JavaScript : calcul des racines carrées d'un nombre complexe

Ce programme ci-dessous calcule la forme algébrique des racines carrées d'un nombre complexe donné sous la forme a + bi. Le programme reconnaît les fractions (données sous forme n/d), fonctions mathématiques (sin, cos, tan, sqrt : racine carrée, ...) et s'efforce de donner des valeurs rationnelles (généralement des approximations) en faisant appel au développement en fraction continue. L'approximation rationnelle trouvée par l'ordinateur doit être lue avec circonspection ! Un contrôle s'impose donc. A titre d'exercice, le lecteur pourra facilement compléter le programme afin de rendre ce contrôle automatique.

<SCRIPT LANGUAGE=JavaScript>

var pi,a,b,c,del;x=1;
pi=Math.PI;e=Math.E;
a="";b="";n=6

function go()
{
with (Math)
{
a=prompt("a = ",a)
if (a==null) {return} else {a=eval(a)}
b=prompt("b = ",b)
if (b==null) {return} else {b=eval(b)}
del=a*a+b*b;
x2=(a+sqrt(del))/2;x=sqrt(x2);y2=b*b/4/x2;y=b/2/x;
x$=" = "+x.toString();if(x==floor(x)) {x$=""}
y$=" = "+y.toString();if(y==floor(y)) {y$=""}
sp=sgn(b);signe="x et y de même signe";if(sp==-1){signe="x et y de signes contraires"}
alert("les racines carrées sont ±(x + iy) avec :"+"\n"+"x^2 = "+frac(x2)+"\n"+"y^2 = "+frac(y2)+"\n"+signe)
alert("les racines carrées sont ±(x + iy) avec :"+"\n"+"x = "+frac(x)+x$+"\n"+"y = "+frac(y)+y$)
}
}

function sgn(x)
{
s=(x>0)-(x< 0);
return s
}

function arrondi(x)
{
return sgn(x)*Math.floor(Math.abs(x)*1e12+.5)/1e12
}

function entier(x)
{
x=arrondi(x);
x$=" = "+x.toString();
if(x==Math.floor(x)) {x$=""}
return x$
}

function plus(x)
{
p$="+";if (x<0){p$=""}
return p$
}

function frac(x) // ---------------- ligne 50 ------------
{
with (Math)
{
x=arrondi(x);
s=sgn(x);x=x*s;s$="";if (s<0) {s$="-"}
b0=0;b1=1;a0=1;a1=floor(x);
en=x-floor(x);
if (en<1E-10){f=s$+x.toString(); return f}
d=1;err=1
while(err>1E-6)
{
q=floor(1/en);en=1/en-q;
an=q*a1+a0;bn=q*b1+b0;
asb=an/bn;
err=abs(x - asb);
a0=a1;b0=b1;a1=an;b1=bn;
}
x=arrondi(x*s)
f=s$+an.toString()+"/"+bn.toString()
}
return f
}

</SCRIPT>

JavaScript dans ChronoMath :


© Serge Mehl - www.chronomath.com