LISP - Numéros

Common Lisp définit plusieurs types de nombres. lenumber le type de données comprend divers types de nombres pris en charge par LISP.

Les types de nombres pris en charge par LISP sont -

  • Integers
  • Ratios
  • Nombres à virgule flottante
  • Nombres complexes

Le diagramme suivant montre la hiérarchie des nombres et divers types de données numériques disponibles dans LISP -

Différents types numériques dans LISP

Le tableau suivant décrit diverses données de type de nombre disponibles dans LISP -

N ° Sr. Type de données et description
1

fixnum

Ce type de données représente des entiers qui ne sont pas trop grands et qui se situent principalement entre -215 et 215-1 (il dépend de la machine)

2

bignum

Ce sont de très grands nombres dont la taille est limitée par la quantité de mémoire allouée à LISP, ce ne sont pas des numéros fixes.

3

ratio

Représente le rapport de deux nombres sous la forme numérateur / dénominateur. La fonction / produit toujours le résultat sous forme de ratios, lorsque ses arguments sont des entiers.

4

float

Il représente des nombres non entiers. Il existe quatre types de données flottantes avec une précision croissante.

5

complex

Il représente des nombres complexes, désignés par #c. Les parties réelles et imaginaires peuvent être à la fois des nombres rationnels ou des nombres à virgule flottante.

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

(write (/ 1 2))
(terpri)
(write ( + (/ 1 2) (/ 3 4)))
(terpri)
(write ( + #c( 1 2) #c( 3 -4)))

Lorsque vous exécutez le code, il renvoie le résultat suivant -

1/2
5/4
#C(4 -2)

Fonctions numériques

Le tableau suivant décrit certaines fonctions numériques couramment utilisées -

N ° Sr. Description de la fonction
1

+, -, *, /

Opérations arithmétiques respectives

2

sin, cos, tan, acos, asin, atan

Fonctions trigonométriques respectives.

3

sinh, cosh, tanh, acosh, asinh, atanh

Fonctions hyperboliques respectives.

4

exp

Fonction d'exponentiation. Calcule e x

5

expt

Fonction d'exponentiation, prend base et puissance à la fois.

6

sqrt

Il calcule la racine carrée d'un nombre.

sept

log

Fonction logarithmique. Si un paramètre est donné, puis il calcule son logarithme naturel, sinon le deuxième paramètre est utilisé comme base.

8

conjugate

Il calcule le conjugué complexe d'un nombre. Dans le cas d'un nombre réel, il renvoie le nombre lui-même.

9

abs

Il renvoie la valeur absolue (ou la magnitude) d'un nombre.

dix

gcd

Il calcule le plus grand diviseur commun des nombres donnés.

11

lcm

Il calcule le plus petit multiple commun des nombres donnés.

12

isqrt

Il donne le plus grand entier inférieur ou égal à la racine carrée exacte d'un entier naturel donné.

13

floor, ceiling, truncate, round

Toutes ces fonctions prennent deux arguments comme nombre et renvoie le quotient; floor renvoie le plus grand entier qui n'est pas supérieur au ratio, ceiling choisit le plus petit entier qui est plus grand que le ratio, truncate choisit l'entier du même signe que ratio avec la plus grande valeur absolue inférieure à la valeur absolue du ratio, et round choisit un entier qui est le plus proche du ratio.

14

ffloor, fceiling, ftruncate, fround

Fait la même chose que ci-dessus, mais renvoie le quotient sous forme de nombre à virgule flottante.

15

mod, rem

Renvoie le reste dans une opération de division.

16

float

Convertit un nombre réel en nombre à virgule flottante.

17

rational, rationalize

Convertit un nombre réel en nombre rationnel.

18

numerator, denominator

Renvoie les parties respectives d'un nombre rationnel.

19

realpart, imagpart

Renvoie la partie réelle et imaginaire d'un nombre complexe.

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

(write (/ 45 78))
(terpri)
(write (floor 45 78))
(terpri)
(write (/ 3456 75))
(terpri)
(write (floor 3456 75))
(terpri)
(write (ceiling 3456 75))
(terpri)
(write (truncate 3456 75))
(terpri)
(write (round 3456 75))
(terpri)
(write (ffloor 3456 75))
(terpri)
(write (fceiling 3456 75))
(terpri)
(write (ftruncate 3456 75))
(terpri)
(write (fround 3456 75))
(terpri)
(write (mod 3456 75))
(terpri)
(setq c (complex 6 7))
(write c)
(terpri)
(write (complex 5 -9))
(terpri)
(write (realpart c))
(terpri)
(write (imagpart c))

Lorsque vous exécutez le code, il renvoie le résultat suivant -

15/26
0
1152/25
46
47
46
46
46.0
47.0
46.0
46.0
6
#C(6 7)
#C(5 -9)
6
7