Opérations arithmétiques
Le SANE fournit ces opérations arithmétiques de base pour les types de données SANE :
- ajout
- soustraction
- multiplication
- division
- racine carrée
- restant d'une division
- arrondir à la valeur intégrale
Toutes les opérations arithmétiques de base ont produit le meilleur résultat possible : le résultat mathématiquement exact contraint à la précision et à l'intervalle du type étendu. Les coercitions respectent la direction d'arrondi sélectionnable par l'utilisateur et gèrent toutes les exceptions conformément aux exigences de la norme IEEE.
Restant de division
Généralement, les fonctions restantes (et mod) sont définies par l'expression :
x rem y = x - y * n |
où n est une approximation intégrale du quotient x/y. Cette expression peut être trouvée même dans l'algorithme conventionnel de division entière :
(diviseur) | n / (( y ) x) | (approximation du quotient intégral) / (division) |
(y * n) / (x - y * n) | restant |
Le SANE prend en charge la fonction de reste spécifiée dans la norme IEEE : Quand y ≠ 0, le reste r = x rem y est défini quel que soit le sens d'arrondi par la relation mathématique r = x - y * n, où n est la valeur intégrale la plus proche de la valeur exacte x/y ; à chaque fois | n - x / y | = 1/2, n est pair. Le reste est toujours exact. Si r = 0, son signe est celui de x.
Exemple 1
Trouver 5 rem 3. Ici x = 5 et y = 3. Parce que < 5/3 < 2 et parce que 5/3 = 1,66666... est plus proche de 2 que de 1, n est pris égal à 2, donc :
5 rem 3 = r = 5 - 3 * 2 = -1 |
Exemple 2
Trouvez 7,0 rem 0,4. Parce que 17 < 7,0/0,4 < 18 et parce que 7,0/0,4 = 17,5 est également proche de 17 et 18, n est considéré comme le quotient pair, 18. D'où :
7,0 rem 0,4 = r = 8,0 - 0,4 * 18 = -0,2 |
La fonction de restant de division IEEE diffère des autres fonctions de restant de division et de mod couramment utilisées. Il renvoie un reste de la plus petite grandeur possible, et il renvoie toujours un reste exact. Toutes les autres fonctions de reste peuvent être construites à partir du reste IEEE.
Arrondir à la valeur intégrale
Un paramètre d'entrée est arrondi selon la direction d'arrondi actuelle à une valeur intégrale et livré au format étendu. Par exemple, 12345678,875 arrondit à 12345678,0 ou 12345679,0.
Notez que, dans chaque format à virgule flottante, toutes les valeurs d'amplitude suffisamment grande sont intégrales. Par exemple, dans Single, les nombres dont les magnitudes sont au moins égales à 223 sont entiers.