Mathématiques avec Python et Ruby/Nombres réels en Ruby

=Écriture décimale=
Depuis l'apparition de chiffres arabes et de la numération de position, les nombres décimaux sont devenus plus concrets que les fractions: En écrivant formula_1, on voit deux nombres et on a tendance à oublier que cette écriture désigne un seul nombre (le quotient de 6 par 5). Alors qu'en écrivant ce nombre 1,2 on voit immédiatement qu'il n'y en a qu'un seul !
Decimaux.
Un nombre décimal est un nombre dont le développement décimal s'arrête quelque part. Les réels non décimaux sont donc ceux dont le développement décimal est infini, et on peut en construire exprès de cette manière comme le fit Liouville par exemple.
En "Ruby", certains nombres décimaux ont quand même une infinité de chiffres parce qu'ils sont stockés en machine sous forme binaire et que, sous cette forme, ils ont une infinité de chiffres.
Fractions.
Le développement décimal d'une fraction se remarque par le fait qu'un motif finit par se répéter indéfiniment, comme le montrent les exemples suivants:
puts(1.0/3)
puts(1.0/9.0)
puts(1/11.0)
puts(1.0/7)
Nombres irrationnels.
Les premiers nombres irrationnels connus ont été les racines carrées des nombres entiers et le nombre d'or. 
puts(2**0.5)
puts(Math.sqrt(2))
puts((1+5**0.5)/2)
puts((Math.sqrt(5)+1)/2)
D'autres sont "e" et formula_2:
puts(Math::E)
puts(Math::PI)
Voici comment on peut calculer en "Ruby" la constante de Champernowne:
c='0.'
puts(c.to_f)
puts(c.to_r)
Le premier objet qui a été créé ci-dessus est une chaîne de caractères. "Ruby" le sait parce qu'on l'a mise entre guillemets. Initialement elle comprend le début de la représentation décimale de la constante (ou "0" suivi du point décimal). Le deuxième objet créé ci-dessus est une liste d'entiers (allant de 1 à 40). Cet objet est créé au vol, sans lui donner de nom, parce que la seule chose qu'on veuille faire avec lui, est d'appeler sa méthode "collect" qui fonctionne un peu comme le "times" des entiers: Un bloc d'instructions, entre accolades, avec un indice qui parcourt les éléments successifs du tableau, et ... une seule instruction, de concaténation de "n" (une fois transformé en chaîne de caractères avec "to_s") et de la constante en cours de construction. Ceci fait, la constante est donc une chaîne de caratères, que "Ruby" peut transformer en un réel ("flottant") ou en une fraction ("rationnel").
=Fonctions=
Opérations.
Les quatre opérations sont notées "+", "-", "*" et "/". Dès que l'un des opérandes est écrit avec un point décimal, "Ruby" le reconnaît comme réel et l'opération donne un réel. La division peut même être euclidienne, ce qui permet notamment de calculer la valeur principale d'un angle en radians:
puts(100%Math::PI)
Le signe "-" peut aussi être unaire et dans ce cas, représente l'opposé du nombre qui le suit. Pour additionner un nombre "h" à un autre nombre "x", on peut, au lieu de noter "x=x+h", écrire "x+=h".
Pour arrondir "x" à l'entier inférieur, on invoque "x.floor"; pour arrondir à l'entier supérieur, on invoque "x.ceil". Pour calculer la valeur absolue de "x", on invoque "x.abs". Sa racine carrée se note indifféremment
r=2**0.5
puts(r)
r=Math.sqrt(2)
puts(r)
En effet, l'astérisque dédoublé code l'élévation à un exposant en "Ruby".
Logarithmes et exponentielles.
Logarithmes.
Le script ci-dessous calcule et affiche l'image de 0,5 par le logarithme népérien, par le logarithme décimal, par les fonctions réciproques du cosinus hyperbolique, du sinus hyperbolique, de la tangente hyperbolique:
puts(Math.log(0.5))
puts(Math.log10(0.5))
puts(Math.acosh(0.5))
puts(Math.asinh(0.5))
puts(Math.atanh(0.5))
Exponentielles.
Le script ci-dessous calcule et affiche l'image de 2 par l'exponentielle, par le cosinus hyperbolique, par le sinus hyperbolique, puis la tangente hyperbolique:
puts(Math.exp(2))
puts(Math.cosh(2))
puts(Math.sinh(2))
puts(Math.tanh(2))
Trigonométrie.
Pour calculer les cosinus, sinus et tangente d'un radian, on peut faire comme ceci:
puts(Math.cos(1))
puts(Math.sin(1))
puts(Math.tan(1))
Pour connaître un angle en radians dont le cosinus, le sinus ou la tangente sont connus, on peut mettre un "a" devant la fonction:
puts(Math.acos(0.5))
puts(Math.asin(0.5))
puts(Math.atan(0.5))
Pour connaître un angle dont les côtés opposé et adjacent sont connus, on peut utiliser "Math.atan(y/x)" ou "Math.atan2(x,y)". Et même pour calculer formula_3, on peut utiliser "Math.hypot(x,y)". Par exemple, si on veut connaître les angles et l'hypoténuse d'un triangle rectangle de côtés 12 cm et 5 cm, on peut utiliser ce script:
cdr=180/Math::PI
a=12
b=5
puts(Math.atan2(a,b)*cdr)
puts(Math.atan2(b,a)*cdr)
puts(Math.hypot(a,b))

Mathématiques avec Python et Ruby/Nombres complexes en Ruby