[fpc-pascal] Division by Zero: EDivByZero and EZeroDivide

Bart bartjunk64 at gmail.com
Sat Oct 17 13:57:28 CEST 2009


Hi,

Is there a reason why in fpc both floating point and integer division
by zero raise an EDivByZero exception?

See: http://docwiki.embarcadero.com/VCL/en/SysUtils.EZeroDivide

SysUtils.EZeroDivide exception is raised when an application attempts
to divide a floating-point value by zero.
Note:  Integer divide-by-zero errors raise the SysUtils.EDivByZero exception.

program zerodiv;

{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}

uses Sysutils;

var r,x: extended;
    i,j: integer;

begin
  i := 0;
  r := 0.0;
  try
    write('Integer division by zero: 1 div 0   -> ');
    j := 1 div i;
    writeln(j);
  except
    on e: exception do writeln(e.classname);
  end;
  try
    write('Float division by zero  : 1.0 / 0.0 -> ');
    x := 1.0 / r;
    writeln(x);
  except
    on e: exception do writeln(e.classname);
  end;
end.

Output with Delphi (3.0:
Integer division by zero: 1 div 0   -> EDivByZero
Float division by zero  : 1.0 / 0.0 -> EZeroDivide

Output with Fpc 2.2.4 (tested on win32 and Linux i386)
Integer division by zero: 1 div 0   -> EDivByZero
Float division by zero  : 1.0 / 0.0 -> EDivByZero

Is this by design, or should I report it as a bug?
(B.t.w. setting mode to delphi makes no difference)

Bart



More information about the fpc-pascal mailing list