Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка компиллятора? [D7, XP]


Страницы:   1 2 3

AlexDan ©   (2008-08-18 21:45:00) 

При нажатии (выборе) CheckBox переменная rpr проинимает знач. 0.4, но в if кнопки Button1 почему-то к 0.4 не приравнивается (почему-то уходит в условие else) ..
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if rpr=0.4 then
   begin
    if frac(cha/0.4)=0 then
    begin
    pr1:=cha/0.4-1;
    end
    else
    begin
    pr1:=round(cha/0.4);
    end;
   cd60:=pr1*chb{+perem*1.2};
   end
   else
   begin
   cd60:=pr1*chb{+perem*1.2};
   end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if CheckBox1.Checked then

 begin rpr:=0.4;
      {Edit2.text:=inttostr(klkrab);}

 end

else
 begin rpr:=0;
end;
end;


Германн   (2008-08-19 01:01:00) [1]


> Юрий Зотов ©   (18.08.08 23:10) [28]
>
> Серег, совет - не трать время.

+1
Сей автор уже давно тут известен как троешник не желающий учиться. И в этом посте он это подтвердил ещё раз.


Amoeba   (2008-08-19 00:41:00) [2]


> Renegat ©   (18.08.08 23:56) [40]

А стоит ли метать бисер?


Renegat   (2008-08-18 23:56:00) [3]

2 AlexDan:
Как известно, любые числа, будь то целые или дробные, хранятся в компе в виде последовательностей битов, т.е. разрядов двоичной системы счисления. Так вот, судя по Вашей анкете Вы должны быть наслышаны о переводе чисел одной системы счисления в другую. Так вот, чтобы зашифровать дробное десятичное число, его нужно представить дробным двоичным.
Попробуем это сделать с 0.4 - и с удивлением обнаружим, что 4/10 = 2/5.
Такая (пятеричная) дробь по определению не может быть представлена в виде конечной двоичной - только как периодическая!
Так вот, к чему я клоню.
Существуют разные форматы представления не-целых чисел: REAL4(Single), REAL8(Double) и REAL10(Extended). И у каждого из этих типов мантисса имеет разную длину. И в итоге, когда получилость, скажем, двоичная дробь 0.(1101) то в разных типах она будет выглядеть (условно) как
Single:   0.1101
Double:   0.11011101
Extended:0.110111011101

Вещественные константы, если меня память не подводит, хранятся в Паскале как Extended. А тип вашей переменной, скорее всего, Single или Double.

[+]: Более того, не стоит сбрасывать со счетов и погрешности округления при вычислениях! В результате них даже сравнение равных по размеру типов обернётся дохлым номером...
В итоге получаем правило, которое стотыщ раз уже твердили миру (только ему всё ещё упрямо не хотят доверять):
Никогда не проводите точное сравнение вещественных!!!

ЗЫ: +1 к Сергею.


Сергей М.   (2008-08-18 23:39:00) [4]


> Юрий Зотов ©   (18.08.08 23:10) [28]
>
> не трать время


Внял.

Ушел)


Сергей М.   (2008-08-18 23:33:00) [5]


> AlexDan ©   (18.08.08 23:18) [33]


Ну так ты сделал телодвижения на "раз-два-три" ?)
Или будешь продолжать упираться ?)


{RASkov}   (2008-08-18 23:30:00) [6]

> [36] Юрий Зотов ©   (18.08.08 23:29)
> > {RASkov} ©   (18.08.08 23:26) [34]
>
> Нет тут никакого косяка.


А кто говорил, что есть? :)


Юрий Зотов   (2008-08-18 23:29:00) [7]

> {RASkov} ©   (18.08.08 23:26) [34]

Нет тут никакого косяка. Кроме закосяченного программистом.


Сергей М.   (2008-08-18 23:27:00) [8]


> AlexDan ©   (18.08.08 23:18) [33]


> берёте 1 кг сахара смешиваете с 1 кг ягод и 2.5 кг варенья
> разливаете по банкам


Можно получить 2,5 кг ягод с сахаром.

А можно и 2 кг. г..на.

От "повара" зависит)


{RASkov}   (2008-08-18 23:26:00) [9]

> [33] AlexDan ©   (18.08.08 23:18)

Зачем ты себе и всем запутываешь моск?)
Да, тут есть этот "косяк", и вместо того, что бы понять его и запомнить, ты пытаешься всех и во всем обвинить, зачем?

Только косяка-то и нет....)


AlexDan   (2008-08-18 23:18:00) [10]

Представляете, поваренная книга: берёте 1 кг сахара смешиваете с 1 кг ягод и 2.5 кг варенья разливаете по банкам..))


Юрий Зотов   (2008-08-18 23:17:00) [11]

> AlexDan ©   (18.08.08 23:15) [31]

Он и есть однозначный. Только не тот, который Вам мог бы понравиться.


AlexDan   (2008-08-18 23:15:00) [12]

> Юрий Зотов ©   (18.08.08 23:10) [28]
Значит и ответ по идее должен быть однозначным..


AlexDan   (2008-08-18 23:13:00) [13]

> Юрий Зотов ©   (18.08.08 23:10) [28]

Всё он прекрасно понимает(.. Просто описано всё было чётко..rpr:=0.4 и if rpr = 0.4 я имею в виду визуально.


Anatoly Podgoretsky   (2008-08-18 23:11:00) [14]

> AlexDan  (18.08.2008 21:45:00)  [0]

Нет никакой ошибки компилятора, он работает правильно.


Юрий Зотов   (2008-08-18 23:10:00) [15]

Серег, совет - не трать время. В суть проблемы человек въехать как следует не пожелал, элементарных вещей не знает, и даже то, что присвоение происходит в одном методе, а проверка в другом, а между ними может быть вызвано еще что угодно, и компилятор вдруг должен каким-то волшебным образом отследить логику кода - даже этого человек не понимает. Виноваты компилятор и Борланд.


AlexDan   (2008-08-18 23:09:00) [16]

А rpr(real) нельзя приравнивать к const..


Сергей М.   (2008-08-18 23:03:00) [17]

А, вижу)

Ну точно мартышка)

Делай раз:

const xxx = 0.4;

Делай два:

rpr := xxx;

Делай три:

if rpr = xxx then ...

Что говорит отладчик ?


Сергей М.   (2008-08-18 22:56:00) [18]


> я его сам описал rpr:=0.4


> Смотрите код..


Вылупился.
Не вижу в упор.
Мартышка к старости ?


AlexDan   (2008-08-18 22:54:00) [19]

И самое главное
> Сергей М. ©   (18.08.08 22:44) [19]

> А компилятору неведомо значение переменной rpr на момент
> компиляции

Значение rpr известно, я его сам описалrpr:=0.4, и сравнивал тожес чётко описанным значением if rpr = 0.4. Смотрите код..


Сергей М.   (2008-08-18 22:53:00) [20]


> Борланд на мерсе ездит, (условно), (вроде как я ему платил)


Детский сад - штаны на лямках)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо