fpc-3.0.0 - запилили баг в арифметику

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение vitaly_l » 17.03.2017 11:04:07

zub писал(а):Я незнаю как ты будешь после этого жить, в мире дикарей. но както вот так:

Я с рождения живу в мире дикарей и уже привык, т.к. ещё в далёком детстве, дикари, заставляли меня решать всякие задачки, которые сейчас преподают в институтах. Так что в моей жизни - ничего не поменяется, за исключением того что я буду знать (и постараюсь запомнить) о сбое в организации записи / перевода дробных двоичных чисел в десятичные.

Насколько я понимаю, единственно возможный вариант, вначале избавляться от дроби. потом делать вычисления. и только когда нужно показать результат людям, переводить результат в дробь. Но вообще дикость конечно, на земле 9 миллиардов человек, и до сих пор никто не привёл в порядок запись двоичных чисел. Если в прошлом веке это было простительно, то в наше время - это доказывает существование клана дикарей в академиях наук.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3036
Зарегистрирован: 31.01.2012 16:41:41

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение zub » 17.03.2017 11:06:47

>>и до сих пор никто не привёл в порядок запись двоичных чисел
Дак она в порядке. есть правила следуя которым - проблем нет.
zub
долгожитель
 
Сообщения: 2180
Зарегистрирован: 14.11.2005 23:51:26

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение vitaly_l » 17.03.2017 11:10:17

Ну чтобы совсем было понятно, тот кто допустил эту ошибку, сделал её преднамеренно т.к. 0.4 делённое на 0.4 не равно 1, а чтобы доказать это нужно совершить вышеприведённую операцию избавления от запятой и превращения обратно. Очевидно автор бага с 0.1 хотел таким образом получить Нобелевскую, за найденную ошибку в вычислениях всех дикарей математиков :roll: . Просто ещё математики не поняли сути его открытия :wink: .
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3036
Зарегистрирован: 31.01.2012 16:41:41

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение pupsik » 17.03.2017 11:46:57

Ошибка в том что это не верно выводится на экран? Вроде как двоичное представление не изменилось в версиях.

п.с.
Ну чтобы совсем было понятно, тот кто допустил эту ошибку...

vitaly_l когда я изучал "вышку" (в студенческом смысле слова :)) то для меня была новость, мягко говоря (долго переваривал): 2 + 2 не всегда 4.

Добавлено спустя 11 минут 12 секунд:
и, если использовать один тип переменных:
Код: Выделить всё
var
  Q, z: double;

begin
  Q := 0.1+0.2;
  z := 0.3;
  writeln(Q);
  writeln(0.1+0.2);
  if Q <> z then
    writeln('<>')
  else
    writeln('=');
  ReadLn;
end.     


в случае примера vitaly_l
Код: Выделить всё
var
  Q: double;
  QQ: double;
  r : double = 1;
begin
  Q  := 0.7-0.3;
  QQ := 0.5-0.1;
  if (Q/QQ)=r then
    writeln('=')
  else
    writeln('<>');
  ReadLn; 

Будет ожидаемый результат.
pupsik
энтузиаст
 
Сообщения: 996
Зарегистрирован: 20.08.2014 16:20:13

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение vitaly_l » 17.03.2017 12:00:57

pupsik писал(а):Ошибка в том что это не верно выводится на экран? Вроде как двоичное представление не изменилось в версиях.

Ошибка в то что все математические операции на земле совершаются с ошибкой, вот пример:

Код: Выделить всё
var
s:string;
Q: double;
QQ: double;
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);


Компьютер в первых двух задачах утверждает, что деление 0.4 на 0.4 равно 1, но на самом деле это априори ложное решение, т.к. 0.4 / 0.4 - не равно единице. И это доказано в третьей и четвёртой задачах. Желающие могут получить Нобелевскую, если не лень :wink: .
Последний раз редактировалось vitaly_l 17.03.2017 12:04:27, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3036
Зарегистрирован: 31.01.2012 16:41:41

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение zub » 17.03.2017 12:02:12

Ожидаемый результат будет только если ввести эпсилон величиной соответственно типу переменных. Остальные способы полны детских неожиданностей
zub
долгожитель
 
Сообщения: 2180
Зарегистрирован: 14.11.2005 23:51:26

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение pupsik » 17.03.2017 12:05:00

vitaly_l и какой тип переменной "сидит" в этом:
Код: Выделить всё
(Q/QQ)=1
участке? Т.е. double делим на double равно ???. Или поставив единицу вы считаете что компилятор сам приведёт её к верному (нужному) вам типу?
pupsik
энтузиаст
 
Сообщения: 996
Зарегистрирован: 20.08.2014 16:20:13

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение vitaly_l » 17.03.2017 12:06:53

zub писал(а):Ожидаемый результат будет только если ввести эпсилон величиной соответственно типу переменных. Остальные способы полны детских неожиданностей

Ожидаемый и верный - это разные понятия, я чуть подправил сделал комментарии, чтобы было более понятно суть реальной шибки ВСЕХ вычислений на Земле:
Код: Выделить всё
var
s:string;
Q: double;
QQ: double;
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);
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3036
Зарегистрирован: 31.01.2012 16:41:41

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение Лекс Айрин » 17.03.2017 12:11:44

vitaly_l, как бы редко когда все неправы, а кто-то один прав. А на гениальность мы оба, увы, не тянем(((
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4010
Зарегистрирован: 19.02.2013 16:54:51

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение zub » 17.03.2017 12:15:30

>>чтобы было более понятно суть реальной шибки вычислений ВСЕХ ХУДОЖНИКОВ на Земле:
фиксед.

Дикари же когда им нужно проверить равны ли A и B являющиеся вещественными числами с плавающей запятой делают так:
Код: Выделить всё
If abs(a-b)<eps then равно else неравно

eps - выбирается исзодя из требований точности задачи, но не меньше чем максимальная погрешность типов A и B
zub
долгожитель
 
Сообщения: 2180
Зарегистрирован: 14.11.2005 23:51:26

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение vitaly_l » 17.03.2017 12:26:17

zub писал(а):eps - выбирается исзодя из требований точности задачи, но не меньше чем максимальная погрешность типов A и B

Вы даже не поняли суть задачи. Речь идёт исключительно о делении равных дробей.




Лекс Айрин писал(а):vitaly_l, как бы редко когда все неправы, а кто-то один прав. А на гениальность мы оба, увы, не тянем(((

Научитесь уже избавляться от своих комплексов. Понятие "гениальность" ввели для дураков, постольку как на талантах так и на гениях - мошенники зарабатывают деньги. И только ради одурачивания талантливых людей, введено понятие "гений", т.к. пока талантливые дураки доказывают что они гении, умные мошенники - зарабатывают на их талантах деньги. Так что оставьте свои комплексы себе и не распространяйте заразу одурачивания дальше. И все эти ваши методы, "высасывания энергии", ради которых вы пытаетесь задеть и потом полагаете что высасываете энергию и прочий мифический мусор, тоже рекомендую выкинуть из головы.

Вот пример слепости 9 миллиардов людей:
Код: Выделить всё

var
s:string;
Q: double;
QQ: double;
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);


И более того я знаю причину слепости 9 миллиардов людей, но пока не хочу её озвучивать, т.к. реальная правда очень неприятна.



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3036
Зарегистрирован: 31.01.2012 16:41:41

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение Дож » 17.03.2017 12:31:09

Лекс Айрин писал(а):
Дож писал(а): После этого можно вычислить точность обоих вариантов и посмотреть как эта точность различается. Это уже получится предметное обсуждение именно общей логики работы с Double.

Знаешь, это похоже на любимое развлечение математиков -- нахождение последнего знака числи Пи. в реальности же для этого нет смысла.

Да чего уж там мелочиться, вся математика — это всего лишь развлечение. Набор интересных задачек, не более. В реальной жизни математика вообще не нужна, ну там, может сдачу в магазе посчитать, разве что.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 663
Зарегистрирован: 12.10.2008 16:14:47

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение veb86 » 17.03.2017 12:33:28

vitaly_l писал(а):И более того я знаю причину слепости 9 миллиардов людей, но пока не хочу её озвучивать, т.к. реальная правда очень неприятна.

Не может быть! Не уж то мы живем в матрице???
veb86
новенький
 
Сообщения: 15
Зарегистрирован: 16.03.2016 12:58:35

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение mig-31 » 17.03.2017 12:44:37

Дож писал(а): В реальной жизни математика вообще не нужна

Но в этом вы сильно заблуждаетесь. Математика нужна почти везде, где мы видим технический прогресс.
mig-31
постоялец
 
Сообщения: 168
Зарегистрирован: 14.07.2011 13:46:48

Re: fpc-3.0.0 - запилили баг в арифметику

Сообщение vitaly_l » 17.03.2017 12:45:01

Дож писал(а):Да чего уж там мелочиться, вся математика — это всего лишь развлечение. Набор интересных задачек, не более. В реальной жизни математика вообще не нужна

Ну почему же? Математика, в реальной жизни - позволяет содержать мозг в рабочем состоянии. Ещё её можно применять в конструкторских задачах. К физике и химии - математика, действительно неприменима, т.к. 2 + 2 = сколько надо столько и равно.

veb86 писал(а):Не может быть! Не уж то мы живем в матрице???

Ну почему сразу в матрице? Всё живое на земле - это глюки моего космического корабля, под названием БОГ (капитаном которого я являюсь). Его сглючило и он сотворил небо и звёзды. А потом ещё и Землю населил. :roll: Сказки всякие людям показывает, проходы в океанах делает, Моисей по ним ходит. В общем всё как в приличных квестах :wink: ... И никаких матриц.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3036
Зарегистрирован: 31.01.2012 16:41:41

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru