
Отдельные значения Ceil обрабатывает нормально. Но с выражениями - дробями переменных считает по разному. Подскажите в чем дело?
Пример:
Ceil((A - B)/C)
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, Math;
type
{ TfmMain }
TfmMain = class(TForm)
btCalculate: TButton;
leA: TLabeledEdit;
leB: TLabeledEdit;
leC: TLabeledEdit;
leD: TLabeledEdit;
leE: TLabeledEdit;
leF: TLabeledEdit;
procedure btCalculateClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
fmMain: TfmMain;
implementation
{$R *.lfm}
{ TfmMain }
procedure TfmMain.btCalculateClick(Sender: TObject);
var
A, B, C, D, E, F: real;
begin
A := StrToFloat(leA.Text);
B := StrToFloat(leB.Text);
C := StrToFloat(leC.Text);
D := (A - B)/C;
E := Ceil((A - B)/C);
F := Ceil(D);
leD.Text := FloatToStr(D);
leE.Text := FloatToStr(E);
leF.Text := FloatToStr(F);
end;
end.
Понятней наверное картинками:
1) С целыми числами - всё Ок
2) Уменьшаю в 10 раз - всё Ок
3) Уменьшаю еще в 10 раз - получаю отличие, значение ошибочно увеличивается на единицу

Добавлено спустя 21 минуту 55 секунд:
Ухахочешься, уменьшил значения еще в 10 раз. Опять верный ответ (4).

Так что получается, что при каких-то значениях Ceil неправильно обработал выражение.
Что же теперь делать, свою функцию чтоль писать? Но на основе чего? Этих же глюченных функций

Добавлено спустя 7 минут 8 секунд:
Вот проект
http://listingimg.s3.amazonaws.com/test.zip