.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk .\" .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH math_error 7 "3 mai 2023" "Pagini de manual de Linux 6.05.01" .SH NUME math_error \- detectează erorile din funcțiile matematice .SH REZUMAT .nf \fB#include \fP \fB#include \fP \fB#include \fP .fi .SH DESCRIERE Atunci când apare o eroare, majoritatea funcțiilor de bibliotecă indică acest fapt prin returnarea unei valori speciale (de exemplu, \-1 sau NULL). Deoarece în mod obișnuit returnează un număr în virgulă mobilă, funcțiile matematice declarate în \fI\fP indică o eroare folosind alte mecanisme. Există două mecanisme de semnalizare a erorilor: cel mai vechi definește \fIerrno\fP; cel mai nou utilizează mecanismul de excepție în virgulă mobilă (utilizarea lui \fBfeclearexcept\fP(3) și \fBfetestexcept\fP(3), așa cum este prezentat mai jos) descris în \fBfenv\fP(3). .PP Un program portabil care trebuie să verifice o eroare dintr\-o funcție matematică ar trebui să stabilească \fIerrno\fP la zero și să facă următorul apel .PP .in +4n .EX feclearexcept(FE_ALL_EXCEPT); .EE .in .PP înainte de a apela o funcție matematică. .PP La revenirea din funcția matematică, dacă \fIerrno\fP este diferită de zero, sau dacă apelul următor (a se vedea \fBfenv\fP(3)) returnează un rezultat diferit de zero, .PP .in +4n .EX fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW); .EE .in .PP .\" enum .\" { .\" FE_INVALID = 0x01, .\" __FE_DENORM = 0x02, .\" FE_DIVBYZERO = 0x04, .\" FE_OVERFLOW = 0x08, .\" FE_UNDERFLOW = 0x10, .\" FE_INEXACT = 0x20 .\" }; atunci s\-a produs o eroare în funcția matematică. .PP Condițiile de eroare care pot apărea pentru funcțiile matematice sunt descrise mai jos. .SS "Eroare de domeniu" O \fIeroare de domeniu\fP apare atunci când o funcție matematică este furnizată cu un argument a cărui valoare se află în afara domeniului pentru care este definită funcția (de exemplu, dând un argument negativ lui \fBlog\fP(3)). Atunci când apare o eroare de domeniu, funcțiile matematice returnează în mod obișnuit un NaN (deși unele funcții returnează o valoare diferită în acest caz); \fIerrno\fP este stabilită la \fBEDOM\fP și se generează o excepție „nevalidă” (\fBFE_INVALID\fP) în virgulă mobilă. .SS "Eroare de pol (semn)" O \fIeroare de pol\fP apare atunci când rezultatul matematic al unei funcții este un infinit exact (de exemplu, logaritmul lui 0 este un infinit negativ). Atunci când apare o eroare de pol, funcția returnează valoarea (cu semn) \fBHUGE_VAL\fP, \fBHUGE_VALF\fP sau \fBHUGE_VALL\fP, în funcție de tipul rezultatului funcției: \fIdouble\fP, \fIfloat\fP sau \fIlong double\fP. Semnul rezultatului este cel care este corect din punct de vedere matematic pentru funcția respectivă. \fIerrno\fP este stabilită la \fBERANGE\fP și se generează o excepție de „împărțire la zero” (\fBFE_DIVBYZERO\fP) în virgulă mobilă. .SS "Eroare de interval" O \fIeroare de interval\fP apare atunci când magnitudinea rezultatului funcției înseamnă că acesta nu poate fi reprezentat în tipul de rezultat al funcției. Valoarea de returnare a funcției depinde de faptul dacă eroarea de interval a fost o depășire a limitei maxime sau o depășire a limitei minime. .PP Un rezultat flotant \fIde depășire a limitei maxime\fP dacă rezultatul este finit, dar este prea mare pentru a fi reprezentat în tipul de rezultat. Atunci când se produce o depășire, funcția returnează valoarea \fBHUGE_VAL\fP, \fBHUGE_VALF\fP sau \fBHUGE_VALL\fP, în funcție de faptul că tipul rezultatului funcției este \fIdouble\fP, \fIfloat\fP sau \fIlong double\fP. \fIerrno\fP este stabilită la \fBERANGE\fP și se generează o excepție de „depășire a limitei maxime” (\fBFE_OVERFLOW\fP) în virgulă mobilă. .PP Un rezultat flotant \fIde depășire a limitei minime\fP dacă rezultatul este prea mic pentru a fi reprezentat în tipul de rezultat. În cazul în care se produce o depășire a limitei minime, o funcție matematică returnează de obicei 0,0 (C99 spune că o funcție trebuie să returneze „o valoare definită de implementare a cărei mărime nu este mai mare decât cel mai mic număr pozitiv normalizat în tipul specificat”). \fIerrno\fP poate fi stabilită la \fBERANGE\fP și poate fi generată o excepție „depășire a limitei minime” (\fBFE_UNDERFLOW\fP) în virgulă mobilă. .PP Unele funcții generează o eroare de interval în cazul în care valoarea argumentului furnizat sau rezultatul corect al funcției ar fi \fIsubnormal\fP. O valoare subnormală este o valoare diferită de zero, dar cu o magnitudine atât de mică încât nu poate fi prezentată în formă normalizată (adică cu un 1 în cel mai semnificativ bit al semnificantului). Reprezentarea unui număr subnormal va conține unul sau mai multe zerouri la început în semnificație. .SH NOTE .\" See CONFORMANCE in the glibc 2.8 (and earlier) source. Identificatorul \fImath_errhandling\fP specificat de C99 și POSIX.1 nu este acceptat de glibc. Acest identificator ar trebui să indice care dintre cele două mecanisme de notificare a erorilor (\fIerrno\fP, excepții recuperabile prin \fBfetestexcept\fP(3)) este utilizat. Standardele impun ca cel puțin unul dintre ele să fie utilizat, dar permit ca ambele să fie disponibile. Situația actuală (glibc 2.8) în cadrul glibc este dezordonată. Majoritatea funcțiilor (dar nu toate) ridică excepții în caz de eroare. Unele stabilesc, de asemenea, \fIerrno\fP. Câteva funcții configurează \fIerrno\fP, dar nu generează o excepție. Foarte puține funcții nu fac nici una, nici alta. Consultați paginile de manual individuale pentru detalii. .PP .\" http://www.securecoding.cert.org/confluence/display/seccode/FLP32-C.+Prevent+or+detect+domain+and+range+errors+in+math+functions Pentru a evita complexitatea utilizării \fIerrno\fP și \fBfetestexcept\fP(3) pentru verificarea erorilor, se recomandă adesea să se verifice dacă există valori de argument greșite înainte de fiecare apel. De exemplu, codul următor se asigură că argumentul lui \fBlog\fP(3) nu este un NaN și nu este zero (o eroare de pol) sau mai mic decât zero (o eroare de domeniu): .PP .in +4n .EX double x, r; \& if (isnan(x) || islessequal(x, 0)) { /* Rezolvă problemele cu NaN / eroare de pol / eroare de domeniu */ } \& r = log(x); .EE .in .PP Discuția de pe această pagină nu se aplică funcțiilor matematice complexe (de exemplu, cele declarate de \fI\fP), care, în general, nu sunt obligate să returneze erori prin C99 și POSIX.1. .PP Opțiunea \fBgcc\fP(1) \fI\-fno\-math\-errno\fP face ca executabilul să utilizeze implementări ale unor funcții matematice care sunt mai rapide decât implementările standard, dar nu configurează \fIerrno\fP în caz de eroare; (opțiunea \fBgcc\fP(1) \fI\-ffast\-math\fP activează, de asemenea, \fI\-fno\-math\-errno\fP). O eroare poate fi în continuare testată folosind \fBfetestexcept\fP(3). .SH "CONSULTAȚI ȘI" \fBgcc\fP(1), \fBerrno\fP(3), \fBfenv\fP(3), \fBfpclassify\fP(3), \fBINFINITY\fP(3), \fBisgreater\fP(3), \fBmatherr\fP(3), \fBnan\fP(3) .PP \fIinfo libc\fP .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .