İki kesitten hangisinin diğerinden daha büyük olduğunu bulmalıyım. Bölüm yapısı, pay ve payda için long
değerlerini tutar.Uzun değerleri çarpmanın doğru yolu
try
{
checked
{
long a = fraction1.Numerator * fraction2.Denominator;
long b = fraction2.Numerator * fraction1.Denominator;
return a.CompareTo(b);
}
}
catch
{
throw new Exception("CompareTo failed");
}
Bu durumlarda geniş bir yelpazede için çalışıyor, ancak bir istisna atılır durumlarda miktarı azaltılabilir a
ve b
için başka bir veri türünü seçerek şu şekildedir:
naif bir yaklaşımdır .
Hangi veri türü iyi bir seçim olacaktır (tercihen referans olması için fazladan kütüphanesi bulunmuyor)? decimal
? BigInteger
?
' decimal' gelir veya 'BigInteger' çalışacak, ama sadece beri System.Numerics dan BigInteger başvurulması, bu durumda benim için kabul edilebilir Tabii ki ekstra referans olmaksızın çerçevede. –
"Ondalık" aralığının içinde kalmak için en büyük sayı "kare" 281.474976,710656'dır, ki bu da çok daha küçüktür.MaxValue = 9223372,036854,775807 – David
Whoops - evet, çok yakında çok konuştu . Bunun için üzgünüm. BigInteger veya farklı bir yaklaşıma geçme, ör. ortak faktörler bulmak. –