Test integerness: Difference between revisions
Content added Content deleted
(Test integerness in FreeBASIC) |
No edit summary |
||
Line 857: | Line 857: | ||
Is 5+0i an integer? true |
Is 5+0i an integer? true |
||
Is 5-5i an integer? false</pre> |
Is 5-5i an integer? false</pre> |
||
=={{header|Delphi}}== |
|||
{{works with|Delphi|6.0}} |
|||
{{libheader|SysUtils,StdCtrls}} |
|||
<syntaxhighlight lang="Delphi"> |
|||
{Complex number} |
|||
type TComplex = record |
|||
Real,Imagine: double; |
|||
end; |
|||
{Tolerance for fuzzy integer test} |
|||
const Tolerance = 0.00001; |
|||
function IsFloatInteger(R,Fuzz: extended): boolean; |
|||
{Determine if floating point number is an integer} |
|||
var F: extended; |
|||
begin |
|||
F:=Abs(Frac(R)); |
|||
if IsNan(R) or IsInfinite(R) then Result:=False |
|||
else Result:=(F<=Fuzz) or ((1-F)<=Fuzz); |
|||
end; |
|||
function IsComplexInteger(C: TComplex; Fuzz: extended): boolean; |
|||
{Determine if Complex number is an integer} |
|||
begin |
|||
Result:=(C.Imagine=0) and IsFloatInteger(C.Real,Fuzz); |
|||
end; |
|||
function GetBooleanStr(B: boolean): string; |
|||
{Return Yes/No string depending on boolean} |
|||
begin |
|||
if B then Result:='Yes' else Result:='No'; |
|||
end; |
|||
procedure DisplayFloatInteger(Memo: TMemo; R: extended); |
|||
{Display test result for single floating point number} |
|||
var S: string; |
|||
var B1,B2: boolean; |
|||
begin |
|||
B1:=IsFloatInteger(R,0); |
|||
B2:=IsFloatInteger(R,Tolerance); |
|||
Memo.Lines.Add(Format('%15.6n, Is Integer = %3S Fuzzy = %3S',[R,GetBooleanStr(B1),GetBooleanStr(B2)])); |
|||
end; |
|||
procedure DisplayComplexInteger(Memo: TMemo; C: TComplex); |
|||
{Dispaly test result for single complex number} |
|||
var S: string; |
|||
var B1,B2: boolean; |
|||
begin |
|||
B1:=IsComplexInteger(C,0); |
|||
B2:=IsComplexInteger(C,Tolerance); |
|||
Memo.Lines.Add(Format('%3.1n + %3.1ni Is Integer = %3S Fuzzy = %3S',[C.Real,C.Imagine,GetBooleanStr(B1),GetBooleanStr(B2)])); |
|||
end; |
|||
procedure TestIntegerness(Memo: TMemo); |
|||
var C: TComplex; |
|||
begin |
|||
DisplayFloatInteger(Memo,25.000000); |
|||
DisplayFloatInteger(Memo,24.999999); |
|||
DisplayFloatInteger(Memo,25.000100); |
|||
DisplayFloatInteger(Memo,-2.1e120); |
|||
DisplayFloatInteger(Memo,-5e-2); |
|||
DisplayFloatInteger(Memo,NaN); |
|||
DisplayFloatInteger(Memo,Infinity); |
|||
Memo.Lines.Add(''); |
|||
C.Real:=5; C.Imagine:=0; |
|||
DisplayComplexInteger(Memo,C); |
|||
C.Real:=5; C.Imagine:=5; |
|||
DisplayComplexInteger(Memo,C); |
|||
end; |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
25.000000, Is Integer = Yes Fuzzy = Yes |
|||
24.999999, Is Integer = No Fuzzy = Yes |
|||
25.000100, Is Integer = No Fuzzy = No |
|||
-2.1E120, Is Integer = Yes Fuzzy = Yes |
|||
-0.050000, Is Integer = No Fuzzy = No |
|||
NAN, Is Integer = No Fuzzy = No |
|||
INF, Is Integer = No Fuzzy = No |
|||
5.0 + 0.0i Is Integer = Yes Fuzzy = Yes |
|||
5.0 + 5.0i Is Integer = No Fuzzy = No |
|||
Elapsed Time: 11.308 ms. |
|||
</pre> |
|||
=={{header|Elixir}}== |
=={{header|Elixir}}== |