Aracılığıyla paylaş


System.Single.CompareTo yöntemleri

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Değerlerin eşit olarak kabul edilmesi için aynı olması gerekir. Özellikle kayan nokta değerleri birden çok matematik işlemine bağımlı olduğunda, duyarlıklarını kaybetmeleri ve değerlerinin en az önemli basamakları dışında neredeyse aynı olması yaygındır. Bu nedenle, CompareTo yönteminin dönüş değeri bazen şaşırtıcı görünebilir. Örneğin, belirli bir değerin çarpması ve ardından aynı değerin bölünmesi özgün değeri üretmelidir, ancak aşağıdaki örnekte hesaplanan değer özgün değerden büyük olduğu ortaya çıkar. "R" standart sayısal biçim dizesi kullanılarak iki değerin tüm önemli basamaklarının gösterilmesi, hesaplanan değerin en az önemli basamaklardaki özgün değerden farklı olduğunu gösterir. Bu tür karşılaştırmaları işleme hakkında bilgi için Equals(Single) yönteminin Açıklamalar bölümüne bakın.

Değeri NaN olan bir nesne, değeri NaN (kendisi bile) olan başka bir nesneye eşit olarak kabul edilmese de, IComparable<T> arabirimi A.CompareTo(A) sıfır döndürmesini gerektirir.

CompareTo(System.Object)

value parametresi null veya Singleörneği olmalıdır; aksi takdirde, bir özel durum oluşturulur. Singleherhangi bir örneği, değerinden bağımsız olarak nulldeğerinden büyük kabul edilir.

using System;

public class Example
{
   public static void Main()
   {
       float value1 = 16.5457f;
       float operand = 3.8899982f;
       object value2 = value1 * operand / operand;
       Console.WriteLine($"Comparing {value1} and {value2}: {value1.CompareTo(value2)}");
       Console.WriteLine();
       Console.WriteLine($"Comparing {value1:R} and {value2:R}: {value1.CompareTo(value2)}");
   }
}
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
let value1 = 16.5457f
let operand = 3.8899982f
let value2 = box (value1 * operand / operand)
printfn $"Comparing {value1} and {value2}: {value1.CompareTo value2}\n"
printfn $"Comparing {value1:R} and {value2:R}: {value1.CompareTo value2}"
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
Module Example2
    Public Sub Main()
        Dim value1 As Single = 16.5457
        Dim value2 As Object = value1 * CSng(3.8899982) / CSng(3.8899982)
        Console.WriteLine("Comparing {0} and {1}: {2}",
                          value1, value2, value1.CompareTo(value2))
        Console.WriteLine()
        Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
                          value1, value2, value1.CompareTo(value2))
    End Sub
End Module
' The example displays the following output:
'       Comparing 16.5457 and 16.5457: -1
'       
'       Comparing 16.5457 and 16.545702: -1

Bu yöntem IComparable arabirimini desteklemek için uygulanır.

CompareTo(System.Single)

Bu yöntem System.IComparable<T> arabirimini uygular ve Single.CompareTo(Object) parametresini bir nesneye dönüştürmesi gerekmediğinden value aşırı yüklemesinden biraz daha iyi performans gösterir.

using System;

public class Example2
{
   public static void Main()
   {
       float value1 = 16.5457f;
       float operand = 3.8899982f;
       float value2 = value1 * operand / operand;
       Console.WriteLine($"Comparing {value1} and {value2}: {value1.CompareTo(value2)}");
       Console.WriteLine();
       Console.WriteLine($"Comparing {value1:R} and {value2:R}: {value1.CompareTo(value2)}");
   }
}
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
let value1 = 16.5457f
let operand = 3.8899982f
let value2 = value1 * operand / operand
printfn $"Comparing {value1} and {value2}: {value1.CompareTo value2}\n"
printfn $"Comparing {value1:R} and {value2:R}: {value1.CompareTo value2}"
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
Module Example
   Public Sub Main()
       Dim value1 As Single = 16.5457
       Dim value2 As Single = value1 * CSng(3.8899982) / CSng(3.8899982)
       Console.WriteLine("Comparing {0} and {1}: {2}",
                         value1, value2, value1.CompareTo(value2))
       Console.WriteLine()
       Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
                         value1, value2, value1.CompareTo(value2))
   End Sub
End Module
' The example displays the following output:
'       Comparing 16.5457 and 16.5457: -1
'       
'       Comparing 16.5457 and 16.545702: -1

Dönüştürmeleri genişletme

Programlama dilinize bağlı olarak, parametre türünün örnek türünden daha az bit (daha dar) olduğu bir CompareTo yöntemi kodlayabilirsiniz. Bunun nedeni, bazı programlama dillerinin parametreyi örnek kadar bit içeren bir tür olarak temsil eden örtük bir genişletme dönüştürmesi gerçekleştirmesi olabilir.

Örneğin, örnek türünün Single ve parametre türünün Int32olduğunu varsayalım. Microsoft C# derleyicisi parametrenin değerini bir Single nesnesi olarak göstermek için yönergeler oluşturur, ardından örneğin değerlerini ve parametrenin geniş gösterimini karşılaştıran bir Single.CompareTo(Single) yöntemi oluşturur.

Derleyicisinin sayısal türlerde örtük genişletme dönüştürmeleri gerçekleştirip gerçekleştirmediğini belirlemek için programlama dilinizin belgelerine bakın. Daha fazla bilgi için Tür Dönüştürme Tabloları konusuna bakın.

Karşılaştırmalarda kesinlik

Kayan noktalı sayıların, belgelenen duyarlığı aşan duyarlığı, .NET'in uygulamasına ve sürümüne özgüdür. Sonuç olarak, sayıların iç gösteriminin duyarlığı değişebileceğinden, belirli iki sayının karşılaştırması .NET sürümleri arasında değişebilir.