поехало...Всё живое на земле - это глюки моего космического корабля...
zub зачем вы vitaly_l ссылку дали. Теперь у него "сноски" пошли.
Модератор: Модераторы
поехало...Всё живое на земле - это глюки моего космического корабля...
serbod писал(а):Процессоры Intel всегда считают в extended (80-битном) виде. И правил округления там 5 видов.
Если нужна точная десятичная арифметика, то нужно (необходимо даже) использовать Currency.
var
s:string;
Q: Currency;
QQ: Currency;
b:byte;
bb:byte;
begin
Q  := 0.7-0.3;
QQ := 0.5-0.1;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно =
Q   := 0.4;
QQ := 0.4;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно =
b   := 4;
bb := 4;
if (b div bb)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное =
Q :=(b div bb) / 10;
// вернёт единственно верное решение 0.1, которое явно не равно 1
writestr(s,Q :2:2);
writeln('Q = ' +s);
readln;
end.     
pupsik писал(а):на флуд смахивает ваша истина
var
  b, z : Double;
begin
  if 0.2 + 0.1 = 0.3 then
    WriteLn('=')
  else
    WriteLn('<>');
  b := 0.2  + 0.1;
  z := 0.3;
  if b = z then
    WriteLn('b =')
  else
    WriteLn('b <>');
  b := 0.2 + 0.1;
  if b  = 0.3 then
    WriteLn('xz =')
  else
    WriteLn('xz <>');
  ReadLn;
end.        
pupsik писал(а):Ок...
Тогда скажите, Бог: что в коде ниже не так?
а потом вернёмся к вашим баранам.
var
s:string;
Q: Currency;
QQ: Currency;
b:byte;
bb:byte;
begin
Q  := 0.7-0.3;
QQ := 0.5-0.1;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно =
Q   := 0.4;
QQ := 0.4;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно =
b   := 4;
bb := 4;
if (b div bb)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное =
Q :=(b div bb) / 10;
// вернёт единственно верное решение 0.1, которое явно не равно 1
writestr(s,Q :2:2);
writeln('Q = ' +s);
readln;
end. 
э..э: не понял. Откуда вы остаток берёте? Согласно какой теории?а на самом деле при делении 0.3 на 0.3 должно возвращаться 0.1. Уловили?
по мне: только что вы "сели в лужу" и не заметили.Только что мы в очередной раз положили весь Мир на лопатки.
что в коде ниже не так?
Q :=(b div bb) / 10pupsik писал(а):п.с.
Кстати: каков ответ на вопрос:
что в коде ниже не так?
var
s:string;
Q: Currency;
QQ: Currency;
b:byte;
bb:byte;
begin
Q  := 0.7-0.3;
QQ := 0.5-0.1;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно = 1
Q   := 0.4;
QQ := 0.4;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно = 1
b   := 4;
bb := 4;
if (b div bb)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное 1 = 1 
Q :=(b div bb) / 10;
// вернёт единственно верное решение 0.1, которое явно не равно 1
// пятая задача
if Q =1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное 0.1 <>  1
writestr(s,Q :2:2);
writeln('Q = ' +s);
readln;
end. 
хоть десятую. Ответьте на вопросЯ добавил там пятую задачу
... потом продолжим...что в коде ниже не так?
Для вас одинаково: / и div???
Лекс Айрин писал(а):vitaly_l, Welcome to Wonderland!
Не стоит путать арбузы с едоками. Если у меня треть арбуза и я всю ее сожрал, то едоков 1(один), а не моя десятая часть.
pupsik писал(а):Для вас одинаково: / и div???
var
s:string;
Q: Currency;
QQ: Currency;
b:byte;
bb:byte;
begin
Q  := 0.7-0.3;
QQ := 0.5-0.1;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно = 1
Q   := 0.4;
QQ := 0.4;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно = 1
b   := 4;
bb := 4;
if (b div bb)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное 1 = 1 
Q :=(b div bb) / 10;
// вернёт единственно верное решение 0.1, которое явно не равно 1
// пятая задача
if Q =1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное 0.1 <>  1
writestr(s,Q :2:2);
writeln('Q = ' +s);
readln;
end. 
vitaly_l писал(а): т.к. когда вы делите на калькуляторе 0.3 / 0.3, то он возвращает ложно 1.
Лекс Айрин писал(а):Мой абак тоже возвращает 1. И счеты... такие, деревянные перекладные.
var
s:string;
Q: Currency;
QQ: Currency;
b:byte;
bb:byte;
begin
Q  := 0.7-0.3;
QQ := 0.5-0.1;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно = 1
Q   := 0.4;
QQ := 0.4;
if (Q/QQ)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт ложно = 1
b   := 4;
bb := 4;
if (b div bb)=1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное 1 = 1 
Q :=(b div bb) / 10;
// вернёт единственно верное решение 0.1, которое явно не равно 1
// пятая задача
if Q =1 then
  writeln('=')
else
  writeln('<>');
// вернёт верное 0.1 <>  1
writestr(s,Q :2:2);
writeln('Q = ' +s);
readln;
end. 
vitaly_l писал(а):Ну так это и есть ошибка всего Мира!
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1