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

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

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

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

Сообщение pupsik » 17.03.2017 15:13:19

Лекс Айрин у vitaly_l попросите травки-муравки... у него она качественная..
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Лекс Айрин » 17.03.2017 15:17:56

pupsik, не... я с Мирозданием договорился -- я не употребляю травку (и прочие средства альтернативного восприятия), а оно закрывает для меня Бездну. Мне, конечно, Бездна не страшна, но не стоит искушать судьбу.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение vitaly_l » 17.03.2017 15:19:47

Лекс Айрин писал(а):Опасное мнение. Мир сущность мстительная.

Я знаю. Мошенники сжигают и убивают учёных. А потом весь мир гордится убитыми учёными и ставит им памятники. :roll: Приносят цветы. Читают Пушкина :wink: . Слушают Моцарта :wink: . Я всё это знаю и знаю насколько мир жесток :roll: .

pupsik писал(а):попросите травки-муравки... у него она качественная

Вы опять не поняли суть. Жаль.

Но попытайтесь хоть в этот раз сконцентрироваться на задаче и понять суть. Посмотрите код, прочитайте каждое слово внимательно с пониманием, что и зачем я делаю? Вот задача: ИСКЛЮЧИТЕЛЬНО ТОЛЬКО ПРИ ДЕЛЕНИИ РАВНЫХ ДЕСЯТИЧНЫХ ДРОБЕЙ В МАТЕМАТИКЕ И НА КАЛЬКУЛЯТОРАХ И НА КОМПЬЮТЕРАХ ВСЕГДА И ВЕЗДЕ ВО ВСЕХ ОФИСАХ МИРА - возвращается ложное значение равное 1 (единице), а на самом деле при делении 0.3 на 0.3 должно возвращаться 0.1. Уловили? Нет? Тогда при делении 0.05 / на 0.05 должно вернуться 0.01, а не 1. Понимаете или всё ещё нет? Нет? Тогда при делении 0.777 на 0.777 должно вернуться 0.001, а не 1. А при делении 888.888 / 888.888 должно вернуться 1.001, а не 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.

Я добавил там пятую задачу, в ней доказано, что 0.1 не равно 1 при этом калькуляторы и 1+2 задачи - возвращали ложное значение, т.к. когда вы делите на калькуляторе 0.3 / 0.3, то он возвращает ложно 1. И это во всём мире. Скомпилируйте код и постарайтесь, умом, понять почему верным является только решения 3, 4 и 5 ? Потом проверьте, что вернёт ваш калькулятор. И убедитесь, что весь мир заблуждается.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Лекс Айрин » 17.03.2017 15:25:18

vitaly_l писал(а): Мошенники сжигают и убивают учёных. А потом весь мир гордится убитыми учёными и ставит им памятники.


Вообще-то, Мир САМ убивает.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение pupsik » 17.03.2017 15:30:02

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

Хватит о "уловил"... Ответьте, пожалуйста, на вопрос: "что в коде не так"... Код выложен ранее. Потом можно продолжить.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение serbod » 17.03.2017 15:47:19

vitaly_l писал(а):ИСКЛЮЧИТЕЛЬНО ТОЛЬКО ПРИ ДЕЛЕНИИ РАВНЫХ ДЕСЯТИЧНЫХ ДРОБЕЙ В МАТЕМАТИКЕ И НА КАЛЬКУЛЯТОРАХ И НА КОМПЬЮТЕРАХ ВСЕГДА И ВЕЗДЕ ВО ВСЕХ ОФИСАХ МИРА


Учебник математики с вами не согласен. А ему я доверяю больше, чем вам.
http://www.for6cl.uznateshe.ru/delenie- ... nuyu-drob/
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

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

Сообщение vitaly_l » 17.03.2017 15:51:15

serbod писал(а):Учебник математики с вами не согласен. А ему я доверяю больше, чем вам.
http://www.for6cl.uznateshe.ru/delenie- ... nuyu-drob/

Возьмите любой калькулятор и посчитайте деление 0.777 на 0.777 сколько вернёт? Единицу 1 или 0.001 ?
Далее более понятное решение, только вдумайтесь, а не спорьте ради спора.

pupsik писал(а):То что вы не можете подтвердить это теорией и доказать (основываясь, возможно на ошибочном мнении, учёных... желательно на формулах и теориях) - то же уловил.

Вот более понятное решение с комментариями
Код: Выделить всё
var
s:string;
Q: Currency;
i,ii,m : Extended;
begin

// предположим нужно поделить 0.777 / 0.777
m := 1000; // равно 1000 потому что, имеем дело с 1000-ными десятичными дробями.
i  := 0.777 * m; // это первое 0.777 умноженное на 1000 итого i будет = 777
ii := 0.777 * m; // это второе 0.777 умноженное на 1000 итого ii будет = 777

if (i / ii)=1
  then writeln('1 = 1')
  else writeln('<>');
// вернёт верное 1 = 1 ошибки нет, т.к. 777 число не дробное и при делении 777 на 777 будет естественно 1

Q :=(i / ii) / m; // делим (i / ii), которое всегда вернёт 1, на 1000 т.к. имеем дело с тысячными десятичными дробями
// вернёт единственно верное решение 0.001, которое явно не равно 1,
// а если вы на калькуляторе посчитаете 0.777 / 0.777, то вернёт ложное значение 1.
// и в классической математике тоже ложно вернёт 1, и это ошибка всего Мира.

writestr(s,Q :12:12);
writeln('Q = ' +s);

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

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

Сообщение pupsik » 17.03.2017 16:50:53

vitaly_l
1. Не вижу ответа на мой вопрос.
2. Не вижу теоретического обоснование вашего хм.. пардон: теории.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Сквозняк » 17.03.2017 16:53:26

zub писал(а):ТС, ты еще не пересмотрел мнение где баг, а где он пофикшен?

Конечно пересмотрел - у меня третий вариант:))) Фиксить double в 3.0.0 было лучше в сторону дальнейшего исправления содержимого памяти переменной при операциях - раз там без багов такая информация не хранится, то не всё ли равно, где будет мелкая неточность: в самой переменной или при исправлении :mrgreen: Но раз в extended такое уже реализовано, то пусть будет "разная математика" и каждый выбирает какая лучше подходит для задачи :) Только зря последние 2 разряда extended не спрятали отовсюду кроме побайтовых/побитовых операций.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение vitaly_l » 17.03.2017 17:06:28

pupsik писал(а):1. Не вижу ответа на мой вопрос.

Вот ответ на ваш вопрос, его сделал zub ещё на первой странице: http://www.delphikingdom.com/asp/viewit%20...%20alogid=374
pupsik писал(а):Не вижу теоретического обоснование вашего хм.. пардон: теории.

Это не теория это реальная математика. Найдёте ошибку в следующем коде, при расчёте деления 0.777 на 0.777 ?
Код: Выделить всё
var
s:string;
Q: Currency;
i,ii,m : Extended;
begin

m := 1000;
i  := 0.777 * m; 
ii := 0.777 * m;
Q :=(i / ii) / m;

writestr(s,Q :12:12);
writeln('Q = ' +s);

readln;
end.   

Мой код вернёт 0.001. А любой калькулятор вернёт 1 (единицу). А теперь сделайте плавный график, по функции, в теле которого будет 0.01 делиться на 0.01, и если использовать мой метод, то скачка не будет. А если использовать метод заложенный в калькулятор, то в момент равных дробей - будет скачёк до 1 (единицы). И самолёт входит в штопор и падает, ракета взрывается :wink: . Потому что, ошибка заложена в расчёты, калькуляторов всего Мира. Проверьте на своём калькуляторе и убедитесь уже!!!

Добавлено спустя 10 минут 36 секунд:
Ну или например из-за этой ошибки, все атомные станции на планете, выходят одновременно из строя, т.к. подаётся вместо 0.0001 напряжение равное 1 и тогда... Чернобыльская и Фокусимская аварии - покажутся раем, т.к. на Земле не будет ни одного клочка без радиации. А всё почему? Да потому что бородатый Пупсик, не умеет правильно делить 0.00001 на 0.00001 <== сколько это буде на Вашем калькуляторе??? Посчитайте! 1?!
А теперь посчитайте просто поделив в коде. И там и там буде 1 (единица)? Вникаешь бородатый флудер Пупсик, какая фишка страшная? Знаешь сколько на земле атомных станций? А управляет ими что? И у всех априори ложное решение равное 1...
Последний раз редактировалось vitaly_l 17.03.2017 17:22:48, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение pupsik » 17.03.2017 17:22:12

vitaly_l бло...о... А теперь от обратного: делаем проверку. Т.е. результат деления * на делитель = делимое.
Ваш бурбулятор ещё не сломался? Т.е.: что у вас получится: 0.777 * 0.001 неужто 0.777 :mrgreen: Или травка-муравка не закончилась и система будет сломана?
Вполне возможно вы напишете что проверка не верна. И надо по другому. Вот это "иное" мне интересно. Как там ваша божественность будет выкручиваться :lol:

Добавлено спустя 1 минуту 54 секунды:
Знаешь сколько на земле атомных станций?
я около одной живу. Пока ниче так... А вот троль из вас знатный :wink:

Добавлено спустя 1 минуту 50 секунд:
Вот ответ на ваш вопрос, его сделал zub...
оп... не заметил... Как и вы не смотрели код.. Мил человек, там в другом загвоздка.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Сквозняк » 17.03.2017 17:27:31

vitaly_l писал(а):Мой код вернёт 0.001. А любой калькулятор вернёт 1 (единицу). А теперь сделайте плавный график, по функции, в теле которого будет 0.01 делиться на 0.01, и если использовать мой метод, то скачка не будет. А если использовать метод заложенный в калькулятор, то в момент равных дробей - будет скачёк до 1 (единицы). И самолёт входит в штопор и падает, ракета взрывается . Потому что ошибка заложена в калькуляторы всего мира. Проверьте на своём калькуляторе и убедитесь уже!!!

Прикол в том, что мы считаем цифры обычно для реального мира, а в нём математическая реальность вторична. Чтобы формулы которыми пользуются физики сошлись, огромное количество мелких частиц перестукиваются как детали арифмометра Феликса и решают куда ещё движущихся частиц подбросить чтобы и формулы сошлись и физиковский "закон сохранения энергии" не нарушился. Поэтому 0.1/0.1=1 просто потому что так надо для целостности математики. Ну а неточности в такой организованной мелкими частицами конструкции конечно есть.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение pupsik » 17.03.2017 17:30:40

Найдёте ошибку в следующем коде
если не ошибаюсь - попытка связать Currency с Extended. В принципе могут быть слоно-жирафы.. но чёт я их не встречал.

Сквозняк да не поймёт он что 1 - не только цифра...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение vitaly_l » 17.03.2017 17:31:41

pupsik писал(а):vitaly_l бло...о... А теперь от обратного: делаем проверку. Т.е. результат деления * на делитель = делимое.
Ваш бурбулятор ещё не сломался? Т.е.: что у вас получится: 0.777 * 0.001 неужто 0.777 Или травка-муравка не закончилась и система будет сломана?
Вполне возможно вы напишете что проверка не верна. И надо по другому. Вот это "иное" мне интересно. Как там ваша божественность будет выкручиваться

Это правильная проверка. При обратной проверке - результат будет неправильный. Значит, при делении дробных чисел действуют друге правила. 0.25 делённое на 0.25 - не должно возвращать 1, п равно и число, которое больше себя, т.к. сами по себе оба: делимое и делитель - меньше единицы. Грубо говоря, 0.25 делится на что-то и вдруг 0.25 вырастает до 1...
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение veb86 » 17.03.2017 17:36:21

vitaly_l писал(а):Ну или например из-за этой ошибки, все атомные станции на планете, выходят одновременно из строя, т.к. подаётся вместо 0.0001 напряжение равное 1 и тогда... Чернобыльская и Фокусимская аварии - покажутся раем, т.к. на Земле не будет ни одного клочка без радиации. А всё почему?

Прям начало какой нибудь пост апокалиптической научной фантастики :) А во второй главе обязательно надо обвинить масонов. Которые пользуясь административными рычагами ввели все ЭВМ в заблуждения и уничтожили большую часть человечества!
veb86
новенький
 
Сообщения: 62
Зарегистрирован: 16.03.2016 12:58:35

Пред.След.

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

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

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

Рейтинг@Mail.ru