Açıklamayı "bir türün orjinalinde iyi ya da daha iyi şekilde yapılabilecek bir şeyi yapmak amacıyla farklı bir gösterime dönüştüren ve daha sonra geri dönüştüren kod" olarak değiştirirdim . farklı türde, üzerine etkiyen ve geri dönüştürülmesi tamamen uygun olan ve hata yanlış davranışa neden olur bunun için.
Dönüşümün iyi olduğu bir örnek olarak:
Biri, float
büyüklükleri 1.000'e kadar bir faktöre göre değişebilen dört rastgele işaret değerine sahiptir ve birisinin toplamı en son 0.625 birim içinde hesaplaması gerekir. Dört değeri de birleştirmek double
, toplamı hesaplamak ve sonucu tekrar geri dönüştürmek, float
kullanan herhangi bir yaklaşımdan çok daha verimli olacaktır.float
tek başına .
Kayan nokta değerleri, en son yerde (ULP) 0,5 birime kadar doğrudur. Bu örnek, en kötü durum yuvarlama hatasının en iyi en kötü durum hatasının% 25'inden daha fazla olmamasını gerektirir. Bir çift kullanılması, 0.5001 ULP içerisinde doğru olacak bir değer verecektir. 0.625 ULP gereksinimi kabul edilmiş gibi görünse de, bu gereksinimler art arda yaklaştırma algoritmalarında sıklıkla önemlidir. Hata sınırı ne kadar sıkı belirtilirse, en kötü durum yineleme gereksinimi o kadar düşük olur.
Dönüşümün kötü olduğu bir örnek olarak:
Birinde kayan nokta sayısı vardır ve değerini benzersiz şekilde temsil edecek bir dize yazdırmak ister. Bir yaklaşım, sayıyı belirli sayıda hane sahip bir dizgeye dönüştürmek, geri dönüştürmeyi denemek ve sonucun eşleşip eşleşmediğine bakmaktır.
Fakat bu aslında zayıf bir yaklaşım. Ondalık bir dize, iki kayan nokta değeri arasındaki yarı nokta noktasında neredeyse tam olarak oturan bir değeri temsil ediyorsa, kayan noktaya yönteminin her zaman daha yakın olacağını garanti etmek oldukça pahalıdır.float
değeri Böyle bir garantiyi yerine getirmeyin (diğer şeylerin yanı sıra, bazı durumlarda milyarlarca rakam uzunluğunda olsa bile, bir rakamın tüm rakamlarını okumayı gerektirir).
Bir yöntemin, temsil edilen değerin en son yerinde (ULP) her zaman 0.5625 birim içindeki bir değeri geri döndüreceğini garanti etmek için çok daha ucuzdur. Sağlam bir "ters çevrilebilir" ondalık-dizge formatlama yordamı, çıktı değerinin doğru değerden ne kadar uzakta olduğunu hesaplamalı ve sonuç 0,25 (ULP) değilse, sonuç 0,375 (ULP) içinde olana kadar rakamları yazdırmaya devam etmelidir. Aksi takdirde, bazı dönüştürme yöntemlerinin doğru işleyeceği bir dize verebilir, ancak diğer dönüştürme yöntemleri de vermez.
Bazen "gerekli" olmayan bir basamağı, yanlış yorumlanabilecek bir değerin çıktısından daha iyidir. Kilit nokta, belirli bir yöntemin dizgiyi tekrar sayıya dönüştürme girişiminin sonucundan ziyade, çıktı işlemiyle ilgili sayısal hesaplamalara dayanarak kaç basamak çıkması gerektiğine karar verilmesi gerektiğidir.