# Premiers pas en OCaml/Annexe/Synthèse
## Types primitifs

| Type | Signification | Représentation | Exemples | Non Erreurs |
| int | Entier | $[-2^{30};2^{30}-1]$ ou $[-2^{62};2^{62}-1]$ | -42 1337 0x539 0o2471 0b10100111001 | 0o8 : non octal 1. : mauvais type 1073741824 : dépassement entier |
| float | Réel, flottant | Entre $-1,8.10^{308}$ et $1,8.10^{308}$ | -1. 137 | 0 : mauvais type 0,42 : pas de virgule 0x1. : impossible |
| char | Caractère | Entre '\000' et '\255' | 'c' '\n' '0' | 'cd' : trop de caractères |
| string | Chaîne de caractères | Tableau de mots de 4 octets ou ​ 8 octets | "chaine de caractères" "c" "1337" | |
| bool | Booléen | true false | true false | |
| unit | Unité | | | |

### Précision des réels

| Intervalle | Précision des réels |
| $]-1,1[$ | $2.2250738585072014.10^{-308}$ |
| $]-1.79769313486231571.10^{308},-1[$ ∪ $]1,1.79769313486231571.10^{308}[$ | $2.22044604925031308.10^{-16}$ |

## Opérations arithmétiques

| Opération | Fonction | Type |
| Addition | + | int -> int -> int |
| Addition | +. | float -> float -> float |
| Soustraction | - | int -> int -> int |
| Soustraction | -. | float -> float -> float |
| Multiplication | * | int -> int -> int |
| Multiplication | *. | float -> float -> float |
| Division euclidienne | / | int -> int -> int |
| Division exacte | /. | float -> float -> float |
| Modulo | mod | int -> int -> int |
| Modulo | mod_float | float -> float -> float |
| Racine carrée | sqrt | float -> float |
| Puissance | ** | float -> float -> float |
| Exponentielle | exp | float -> float |
| Logarithme népérien | log | float -> float |
| Logarithme | log10 | float -> float |
| Cosinus | cos | float -> float |
| Sinus | sin | float -> float |
| Tangente | tan | float -> float |
| Arc cosinus | acos | float -> float |
| Arc sinus | asin | float -> float |
| Arc tangente | atan | float -> float |

## Fonctions utilitaires

| Nom | Fonction | Type |
| Conversion | int_of_float | float -> int |
| Conversion | float_of_int | int -> float |
| Conversion | (float) | int -> float |
| Conversion | int_of_char | char -> int |
| Conversion | char_of_int | int -> char |
| Conversion | string_of_bool | bool -> string |
| Conversion | bool_of_string | string -> bool |
| Conversion | int_of_string | string -> int |
| Conversion | string_of_int | int -> string |
| Conversion | float_of_string | string -> float |
| Conversion | string_of_float | float -> string |
| Lecture | read_line | unit -> string |
| Lecture | read_int | unit -> int |
| Lecture | read_float | unit -> float |
| Affichage | print_char | char -> unit |
| Affichage | print_int | int -> unit |
| Affichage | print_float | float -> unit |
| Affichage | print_string | string -> unit |
| Affichage | print_endline | string -> unit |
| Affichage | print_newline | unit -> unit |
| Concaténation | ^ | string -> string -> string |
| Argument | Sys.argv.(int) | string |
| Argument | Sys.argv | string array |

## Structures de données

| Structure | Type | Exemple |
| Liste | 'a list | [1; 2; 3] |
| Tableau | 'a array | [| 1; 2; 3 |] |
| Tuple | int * char | (2, 'e') |
| Variant | type vt = A | B of int | A B 6 |
| Enregistrements | type person = { name:string; age:int } | { name="Alphonse"; age=32 } someone.name |
* Sommaire