µL cinsinden sıvı hacimlerini izliyorum bir uygulamam var. Şu anda sistem genelinde birimlerin depolanması için 'çift' kullanıyorum ve bu çoğu durumda iyi çalışıyor. Bununla birlikte, bu hacimlerin büyük sayılarını eklemeye ve çıkarmaya başladığımda, çeşitli birikim hataları içeri girmeye başlar. Hatalar büyüklük olarak çok küçüktür, fakat eşik değerleriyle problemlere neden olurlar, bu durumda aniden hacim beklenenden daha azdır, doğrulama hatalarına neden oluyor. Bunun, biriken kayan nokta işlemlerini gerçekleştirmede oldukça yaygın bir sorun olduğunu anlıyorum, ancak sorunları en iyi nasıl çözeceğimi merak ediyorum. Bir kaç düşünce yaşadım:Yuvarlama/birikme hatalarıyla kolayca ilgileniyor
Bütün çift referanslarımı tamsayılarla değiştirebilirim ve nL'deki her şeyi takip edebilirim. Bu kesinlikle sorunu çözecektir, ama çok invaziv bir değişim. Sistem henüz üretimde kullanılmamaktadır, bunun anlamı şimdi uygulamak, daha sonra uygulamaktan çok daha kolay olacaktır.
Çift yerine Ondalık kullanabilirim. Bu tamsayılara geçmek yerine daha az invaziv, ancak yine de oldukça önemli değişiklikler gerektirir.
Tüm birim karşılaştırmalarının belirli bir hata toleransı için izin vermesini isteyebilirim. Bu, şu anda yaptığım şeydir, fakat karşılaştırma kodunu çirkin kılar ve hiç kimsenin kalıbı uygulamayı unutmamasını sağlamak için bir kod gözden geçirmesi gerekir.
Hata birikimini önlemek için her hesaplamadan sonra belirli bir toleransa yuvarlama gerçekleştirebilirim. Bu karşılaştırmaları daha temiz hale getirir, ancak şimdi her yerde benzer görevler vardır.
Bu sorunla da mücadele edenler için, hangi çözümlerin en temiz olduğu belirlendi? Birikimli hesaplamalar yaparken bilmem gereken başka tuhaflıklar var mı?
Yan not: bir şey ile çift değiştirmeye karar verirseniz - yerine 'decimal' /' long' özel sınıf düşünün. Kodlama maliyeti yaklaşık olarak aynı olurdu, ancak temsil üzerinde kontrol sahibi olursunuz ve herhangi bir otomatik dönüşüm sağlamazsa istenmeyen sayıları normal sayısal türlere engelleyebilir. –
Neredeyse kesinlikle yapmak istemiyorsunuz # 4, # 3 çok daha fazla tercih edilir. # 4 her operasyona, sahip olduğunuzdan daha büyük bir hata potansiyeli veriyor, bu da çok kötü olabilir. – Servy
Oy vermemin ayrılmaz bir türü var - belki de Alexei'nin önerdiği gibi. –