Dzięki za wytłumaczenie. Nie rozumiem tego rzutowania, ale kiedyś może do tego dojdę, na razie obejdę sie chyba bez ;/
Do czego dokładniej służy extended- tzn kiedy sie to stosuje? <-EDYCJA: już znalazłem co to jest i do czego ;D
Hmm, jeśli lepiej użyć np real to po co jest longint i inne?
program test;
uses crt;
var a,b,c:longint;
begin
b:=11;
c:=3;
a:=trunc(b/c); // to samo co a:=b div c; tylko że dłuższe w czasie
writeln(a);
a:=longint(b/c); // to samo co a:=b div c; tylko że dłuższe w czasie
writeln(a);
a:=round(b/c); // a tu zaokrąglenie na ile pamiętam do najbliższej parzystej
writeln(a);
a:=longint(floor(b/c+0.5)); // a tu zaokrąglenie znane ze szkoły
writeln(a);
readkey;
end.
Nie działa, nie mam pojęcia co jest źle:
Recompiling because of D:\FPC\2.2.2\bin\program.pas
program.pas(10,8) Error: Illegal type conversion: "Extended" to "LongInt"
program.pas(14,21) Error: Identifier not found "floor"
program.pas(17,4) Fatal: There were 2 errors compiling module, stopping
program.pas(0) Fatal: Compilation aborted
O co chodzi w tym że dłuższe w czasie? Mam też taki problem:
var
a,b,c:real;
begin
b:=1234567890123456789012345678901234567890;
c:=2;
a:=b/c;
writeln(a:1:2);
end.
Wynik: 6.17283945061728E+038
Co zrobić by wyświetlało większą liczbę?
Drugi problem- dlaczego mając małą liczbę (bo jest obsługiwana już poprawnie jeśli dołożę kilka zer): 12345678901234567890 źle ją oblicza? - dzieląc ją przez 2 otrzymuję minusową liczbę i do tego nie poprawną nawet jeśli zabrać minus (-3050532586237490000.00).
Gdy do 12345678901234567890 dodam jedno 0 i jest 123456789012345678900 to już jest wynik prawidłowy i dodatni czyli 61728394506172800000.00