Precizia numerelor complexe: Diferență între versiuni

De la YO3ITI
Salt la: navigare, căutare
(Pagină nouă: The real and imaginary parts of a complex number are represented by two double-precision floating-point values. This means that Complex values, like double-precision floating-point...)
 
 
(Nu s-au afișat 4 versiuni intermediare efectuate de același utilizator)
Linia 1: Linia 1:
The real and imaginary parts of a complex number are represented by two double-precision floating-point values. This means that Complex values, like double-precision floating-point values, can lose precision as a result of numerical operations. This means that strict comparisons for equality of two Complex values may fail, even if the difference between the two values is due to a loss of precision. For more information, see Double.
+
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:
 
 
For example, performing exponentiation on the logarithm of a number should return the original number. However, in some cases, the loss of precision of floating-point values can cause slight differences between the two values, as the following example illustrates.
 
 
<syntaxhighlight lang="c#">
 
<syntaxhighlight lang="c#">
 
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} \nEqual: {2}", value, value2,  
+
Console.WriteLine("{0} \n{1} \nEgal: {2}", value, value2,  
 
                                             value == value2);
 
                                             value == value2);
// The example displays the following output:
+
// 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)
//    Equal: False
+
//    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.