Çok yüksek ihtimal ile Embarcadero XE7'deki hatayı ileriki sürümlerde düzeltmiştir. Kullandığınız XE7 Update 1 sürümü mü? Yoksa ilk çıkan sürümü mü acaba? Şu anda kullanabileceğim XE7 yok eğer bir tane bulabilirsem örnek kodu test edeceğim.
NAN sadece Pascal dilinde kullanılmıyor. C ve benzeri dillerde de mevcut olan bir tanımdır. Ayrıca, Delphi Math unitesi içinde bir değerin NAN olup olmadığını anlamak için IsNan() fonksiyonu tanımlamıştır. Herhangi bir rakamın sıfıra bölünmesi hata olur iken sıfırın sıfıra bölünmesi NAN olarak tanımlanmıştır. Hatta NAN değerleri kendi içlerinde sınıfa ayrılmıştır (QNaN - Quiet Nan, SNaN - Signaling Nan vb).
Sizin istediğiniz "NAN / -NAN değerini sıfır olarak kabul etme" için bilgim dahilinde kendinizin bir fonksiyon içinde kontrolü ya da yukarıda belirttiğim Math.IsNan() fonksiyonunu kullanarak oluşan sonuçları kontrol etmeniz gerekir.
Kod: Tümünü seç
uses
Math;
var
DoubleTest: Double;
begin
DoubleTest := 0 / 0;
if Math.IsNan(DoubleTest) then DoubleTest := 0;
end;
veya fonksiyon kullanmak isterseniz:
Kod: Tümünü seç
uses
Math;
function SetZeroIfNan(const Value: Double): Double;
begin
if Math.IsNan(Value) then Exit(0);
Result := Value;
end;
Kullanımı aşağıdaki gibi olacaktır
Kod: Tümünü seç
var
DoubleTest: Double;
begin
DoubleTest := 0 / 0;
DoubleTest := SetZeroIfNan(DoubleTest);
end;
Bunlar dışında benim bildiğim "NAN değerini sıfır kabul et" şeklinde bir derleyici parametresi şu an için yok.
Son olarak, neden kullandığınız kod içinde düzeltme yoluna gitmiyorsunuz? Böylece ekrana hata mesajı çıkmasını da engellemiş olursunuz. Hata oluşmadan yanlış hesaplanmış değerler göstermenin de önüne geçmiş olursunuz.