Precizia numerelor complexe: Diferență între versiuni
m (Yo3iti a redenumit pagina Precizia numerelor complexe în C în Precizia numerelor complexe) |
|||
(Nu s-au afișat 3 versiuni intermediare efectuate de același utilizator) | |||
Linia 3: | Linia 3: | ||
Complex value = new Complex(Double.MinValue/2, Double.MinValue/2); | Complex value = new Complex(Double.MinValue/2, Double.MinValue/2); | ||
Complex value2 = Complex.Exp(Complex.Log(value)); | Complex value2 = Complex.Exp(Complex.Log(value)); | ||
− | Console.WriteLine("{0} \n{1} \ | + | Console.WriteLine("{0} \n{1} \nEgal: {2}", value, value2, |
value == value2); | value == value2); | ||
− | // | + | // Exemplul va afișa în consolă: |
// (-8.98846567431158E+307, -8.98846567431158E+307) | // (-8.98846567431158E+307, -8.98846567431158E+307) | ||
// (-8.98846567431161E+307, -8.98846567431161E+307) | // (-8.98846567431161E+307, -8.98846567431161E+307) | ||
− | // | + | // Egal: False |
+ | </syntaxhighlight> | ||
+ | |||
+ | În mod asemănător, următorul exemplu, prin care se calculează rădăcina pătrată a unui număr complex, va da rezultate diferite pe versiunile pe 32 biți și [https://en.wikipedia.org/wiki/IA-64 IA64] ale platformei .NET: | ||
+ | <syntaxhighlight lang="c#"> | ||
+ | Complex minusOne = new Complex(-1, 0); | ||
+ | Console.WriteLine(Complex.Sqrt(minusOne)); | ||
+ | // Exemplul va afișa în consolă: | ||
+ | // (6.12303176911189E-17, 1) pe sisteme de operate pe 32 biți. | ||
+ | // (6.12323399573677E-17,1) pe sisteme IA64. | ||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea curentă din 29 martie 2020 11:09
Partea reală și partea imaginară a unui număr complex sunt reprezentate ca variabile în virgulă mobilă de tip double. Din acest motiv își pot pierde precizia ca urmare a operațiunilor matematice. Asta înseamnă că strictețea comparațiilor de egalitate nu este garantată și poate da erori. De exemplu, aplicarea unei funcții exponențiale asupra rezultatului unui logaritm va da diferențe:
Complex value = new Complex(Double.MinValue/2, Double.MinValue/2);
Complex value2 = Complex.Exp(Complex.Log(value));
Console.WriteLine("{0} \n{1} \nEgal: {2}", value, value2,
value == value2);
// Exemplul va afișa în consolă:
// (-8.98846567431158E+307, -8.98846567431158E+307)
// (-8.98846567431161E+307, -8.98846567431161E+307)
// Egal: False
În mod asemănător, următorul exemplu, prin care se calculează rădăcina pătrată a unui număr complex, va da rezultate diferite pe versiunile pe 32 biți și IA64 ale platformei .NET:
Complex minusOne = new Complex(-1, 0);
Console.WriteLine(Complex.Sqrt(minusOne));
// Exemplul va afișa în consolă:
// (6.12303176911189E-17, 1) pe sisteme de operate pe 32 biți.
// (6.12323399573677E-17,1) pe sisteme IA64.