Bugün bir hatayı izleyen yaklaşık 2 saat harcadım ve NaN'i bir şamandıra ile karşılaştırırken java'nın bir istisna attığını daha hızlı buldum. Kendimi bundan sonra koruyabilirsem hoş olurdu. Herhangi bir yardım takdir edilir.Java'nın NaN olması gerektiğinde floatlar arasında bir karşılaştırma yaparken bir istisna atmasını sağlayabilir miyim?
cevap
JVM instruction set reference özellikle kayan nokta matematiğini atanan özel durumlardan bayt kodlarına izin vermez ve NaN bir işlenen olduğunda bunların nasıl çalışması gerektiğini katı bir şekilde belirtir. Bunu yapmanın bir yolu varsa, ya NaN'ye özel durumlar eklemeniz ya da bu denetimleri sizin için eklemek için özel bir derleyici kullanmanız gerekir.
float f = check(myOtherFloat/yetAnotherFloat);
Bu da hesaplama yapar: Bu yöndeki kod yazabilir, Bununla
public static float check(float value) {
if (Float.isNaN(value))
throw new ArithmeticException("NaN");
return value;
}
: yararlı olabilir
Seçeneklerden biri böyle bir işlevi yazmak olacaktır ve bir hatayı atmak. İdeal olarak kısa bir işlev adıyla çok rahatsızlık vermez.
W
Kayan nokta veya çifte koruma, sonucu NaN veya false yapmaktır. NaN'yi tespit etmek istiyorsanız, ilk etapta değeri 0 0 0'dan daha iyi engelleyebilirsiniz. Bir bölümleme yaptığınızda, böleni bir 0 olarak kontrol edin ve eğer bir istisna atayın. Bunu basitleştirmek için bir yardımcı yöntemle sarabilirsiniz.
public static double div(double a, double b) {
if(b == 0) throw new IllegalArguementException();
return a/b;
}
ben değeri 0 olabilir ya da daha sadece, sık sık
double d = a/(b + 1e-9);
Bu NaN> = 0. Eğer sağlandı b üreten asla böyle bir önyargı eklemek biliyorsanız bir == 0, d = = 0. Kullanılacak önyargı duruma göre değişir.
Bu fikri beğeniyorum, ama sonsuzluğun sıfır ile çarpılması ne olacak? Çarpma sırasında aynı şeyi yapar mısın? – templatetypedef
İyi nokta. Belki sonsuzluğa sahip olursun. –
- 1. Bir maven profilinin bir diğerini etkinleştirmesini sağlayabilir miyim?
- 2. Python'da İstisna Nesnelerini Karşılaştırma
- 3. HttpRequest.Content.IsMimeMultipartContent(), true olması gerektiğinde false döndürüyor
- 4. Tarihler arasında karşılaştırma C#
- 5. Onun parametreleri ile EditorForModel için bir örnek sağlayabilir miyim?
- 6. Haskell'in atomik IO gerçekleştirmesini sağlayabilir miyim?
- 7. Varlık tarihleri arasında karşılaştırma SQL
- 8. Nan, NaN ve NAN
- 9. Joda Time'ın Brezilya DST geçiş dönemi sırasında bir istisna atmasını nasıl engelleyebilirim?
- 10. nan
- 11. jQuery otomatik tamamlama, Yeni bir tane yükseltdiğimde önceki ajax çağrısının durmasını sağlayabilir miyim?
- 12. Bir formdaki denetimler arasında yineleme yaparken, belirli düğmeleri nasıl tanımlayabilirim?
- 13. Haskell - System.Process şifre gerektiğinde bir hata veriyor
- 14. Bash if deyimi: Bir ödev ve karşılaştırma yapabilir miyim?
- 15. Gerektiğinde dizin nasıl oluşturulur?
- 16. HTTP: Yönlendirme isteği bir GET olması gerektiğinde, POST isteği 302 alır.
- 17. Öğeleri ve özelliklerini harici bir dosyada saklayabilir ve gerektiğinde arayabilir miyim? (Python'da bir Roguelike programlarken)
- 18. İlkbahar UygulamaListenlerimden birinin en son çalıştırılmasını sağlayabilir miyim?
- 19. Google Haritalar'a enlem ve boylam yerine adresler sağlayabilir miyim?
- 20. Swing JButtons'un daha küçük kenar boşluklarına sahip olmasını sağlayabilir miyim?
- 21. Scala nesnesinin Java'ya parantez olmadan erişebilmesini sağlayabilir miyim?
- 22. QObject yok olduğunda QObject * 'un nullptr olarak ayarlanmasını sağlayabilir miyim?
- 23. C++ Yükseltme Örneği Konu arasında bir istisna atma örneği Örnek
- 24. 'bir istisna
- 25. bir istisna
- 26. Gerektiğinde bir OperationContract parametresi nasıl belirtilir
- 27. Gerektiğinde 'http: //' protokolünü bir url'ye nasıl ekleyebilirim?
- 28. Karşılaştırma pandas.N eşitlendiğinde niçin?
- 29. Bir sınıf olması
- 30. İstisna avcısına ücretsiz bir alternatif var mı?
Eğer bir sinyalizasyonu NaN (snan) ihtiyaç gibi geliyor, ama bu mümkün değil şüpheli. – Gabe
Gerçekten, [Java sinyal karşılaştırmalarını desteklemiyor] (http://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#35254). –