2017-01-21 12 views
6

Tek değerin (veya çift) saklanmasının çok hassas olamayacağını biliyorum. Örneğin 125.12 değerinin depolanması 125.1200074788 ile sonuçlanabilir. şimdi delphi'de, paragraf olarak bir epsilon alan ve 125.1200074788 ya da 125.1200087952 no'lu muadilinin eşit olduğunu söyleyen samevalue ya da kıyaslama gibi bazı yararlı işlevler.tek, çift ve hassas

ama sık sık kod gibi şeyler görüyorum: eğer aSingleVar = 0 ise ... ve aslında her zaman çalıştığımı görüyorum. niye ya ? Tek bir varyasyonda 0 nolu örnek için neden saklamak tam değeri saklıyor?

+0

Sıfırlanabilir. Bir toleransa kadar karşılaştırma yapmak yeterince kolaydır, ancak toleransı nasıl seçersiniz? Algoritmayı anlamalısın. Algoritma hakkında bilgi olmadan verilen herhangi bir tavsiye büyük olasılıkla tavsiye edilir. –

cevap

9

Yalnızca m ve e tamsayı olan form m*2^e biçimindeki değerler kayan nokta değişkeninde saklanabilir (hepsi olmasa da, kesinliğe bağlıdır). 0 bu forma sahiptir ve 3128/25'a eşit olduğu ve 1/252 tamsayı gücü olmadığı için 125.12 yapmaz.

bir hazır 125.12 uzatılmış hassas sayı olarak tedavi edilebilir, çünkü büyük olasılıkla, her zaman False döndürür tek (veya çift) hassas değişkenine 125.12 karşılaştırılması

ve tek bir (veya çift) hassas sayısı, bir değere sahip olacaktır.

+0

Yani, fonksiyon TRectf.IsEmpty: Boolean delphi uygulanması anlamına gelir; başlamak Sonuç: = (Sağ <= Sol) veya (Alt <= Üst); sonu; çok doğru değilse? – loki

+1

@loki problem, farklı türlerde eşittir; Burada <= ve aynı tipte (Sağ, Sol, Üst ve Altta aynı tip var, sanırım) – mik

+0

teşekkürler, sadece gördüm ... – loki

-1

Rudy Velthuis tarafından BigDecimals birimi için iyi bir kullanım gibi görünüyor. Milyonlarca ondalık doğruluk ve hassasiyet yeri.

+1

Uygun değil. Neden öyle düşünüyorsun? Performans sonuçlarını düşündünüz mü? Ama daha önemlisi, soruyu cevaplamaya ne dersin. –

İlgili konular