Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Test Ricası
#1
Aşağıdaki kodu test edip, IfThenEx metodunda sıfıra bölme hatası alıp almadığınızı ve mümkünse test ortamınızın özelliklerini (İşletim Sitemi Versiyonu Delphi Versiyonu) yazabilir misiniz ?

unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

function IfThenEx(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; inline;

implementation

uses
 Math;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 Value : Double;
begin
 Value := 0;
 Value := IfThen(Tag = 0, 25 / 1, 25 / Value);

 Value := 0;
 Value := IfThenEx(Tag = 0, 25 / 1, 25 / Value);

 ShowMessage('Değer:' + Value.ToString);
end;

function IfThenEx(AValue: Boolean; const ATrue : Double; const AFalse: Double): Double;
begin
 if AValue then
   Result := ATrue
 else
   Result := AFalse;
end;

end.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
Hata verdi.
Windows 10 Pro 
Embarcadero® Delphi 10.1 Berlin Version 24.0.25048.9432


Ek Dosyalar Resimler
   
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#3
@Tuğrul HELVACI Alınan hata floating point divide by zero

VMBOX PC
İşletim Sistemi Windows 7 Pro SP1 tüm güncellemeler yapılmış V 6.1 Build 7601, 64 Bit
Ram 4 GB
Intel Core i7-4790 CPU 3.60 GHz

Embarcadero® RAD Studio 10.2 Version 25.0.31059.3231
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#4
Merhaba,
Hata: Floating point division by zero.
İşletim Sistemi: Win 10 Pro (10.0 Build 14393)
Delphi Sürümü: 10.3.1 (26.0.33219.4899)
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
hata vermedi
win7 enterprise sp1, 64 bit işletim sistemi, delphi 10.2 community, 32 bit derleyici

hata verdi
win7 enterprise sp1, 64 bit işletim sistemi, lazarus 2.0.0 - fpc 3.0.4 - 32 ve 64 bit derlemenin her ikisinde de
WWW
Cevapla
#6
Merhaba,

VCL projesinde "Floating point division by zero" hatası oluştu.


FMX Projesi
Sorunsuz çalıştı; Değer:25 sonucu döndü.

Windows 10 Pro
10.3 Update 1 Version 26.0.33219.4899 
Cevapla
#7
Ben de de hata veriyor.


Windows 10 Pro v1809 (17763.316) / Embarcadero® Delphi 10.2 Version 25.0.29899.2631

Zaten beklentim hata vermesi istikametinde. Beni şaşırtan husus, Math unitinde tanımlı olan IfThen metodunda hata vermemesi. Bir diğer ilginç olan her iki metodun birbirinden farklı asm kodu üretmesi.

   

Not olarak tüm FPU exception'larını disable eder isem benim IfThenEx 'de düzgün çalışıyor.

initialization
 Set8087CW($133f);
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
Windows 10 Single Lang x64 10.3 Community Hata verdi.

Fakat şöyle bir şey gördüm. CTRL ile IfThen üzerine tıkladığımda Integer olan fonksiyona gitti. Sonrasında 25 / 1 rakamını 25 / 1.5 olarak değiştirip tekrar denediğimde Single parametre alan fonksiyona gitti.

Anladığım kadarı ile bölme sonuçları integer rakama denk geldiği için bu şekilde dallanıyor. Fakat 1.2 yapsam da False durum parametresi hiç hesaba katmıyor. 25/0 hata olması gerekiyor.

Yinede garip IfThenEx hata veriyor fakat IfThen hata vermiyor. Tek fark veri tipinin Double yapılması. Kendi fonksiyonunda Single Double veya Extended fonksiyonları mevcut.

Tüm değerleri Double değişkenlere atayarak yapmama rağmen Single fonksiyona gidiyor. Double olana hiç uğramıyor. Nedenini merakla bekliyorum.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#9
İşletim sisteminde, componentlerde, IDE'de bug'lar genelde bana tesadüf eder. Hata mıknatısı gibiyim sanırım  Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#10
@Tuğrul HELVACI hocam bizim pclerden birinde; win8.1 ve Delphi 2010 vardı farklı olarak kodu onda denedim: sonuç aynı sıfıra bölme hatası veriyor.
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi