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

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

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

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

Сообщение vitaly_l » 17.03.2017 19:50:14

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

Да я всё понимаю. Но вот, ведь расчёты-то, получаются ложными. Или нет?
Чтобы в математике получить 1, домножают 0.5 на 10 и потом делят 5 на 5. Получают 1 - всё вроде верно.

В реальной жизни, 0.5 ребёнка 100% при такой задаче получит 0.5 морковки, т.к. изначально дано 0.5 морковки и она не может стать целой. Тоже самое и с тротилом. Но как только мы к тротилу, добавляем математику... 0.5 тротила превращаются в 1... а это перебор и снаряд не выдерживает. И как следствие взрывается.

Вот как быть? Как решить такую задачу:
Код: Выделить всё
Есть пять детей и пять морковок.
Делим 5 на 5 каждому достаётся одна морковка. <== вопросов не возникает.

А теперь пробуем поделить 0.5 морковки на 0.5 ребёнка.
Как Вам удалось, половине ребёнка, дать одну целую морковку, если изначально было 0.5 морковки?

Что нужно сделать, чтобы при делении в итоге, 0.5 ребёнка получили 0.5 морковки?
Ага.. но если вы решите эту задачу, то.... тогда придётся признать, что - всё человечество заблуждается и математика неверна.


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

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

Сообщение zub » 17.03.2017 20:13:29

vitaly_l
Завязывай тролить.

>>А теперь пробуем поделить 0.5 морковки на 0.5 ребёнка.
когда ты хочешь узнать расход бензина делишь литры на километры. ты проехал 0.5км потратив 0.5л в итоге твой расход 1 л на 1 км.
С расходом морковок тоже самое - но это совсем не значит что у тебя есть целая морковка и целый ребенок
zub
долгожитель
 
Сообщения: 2528
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Сквозняк » 17.03.2017 20:30:35

vitaly_l писал(а):Но вот, ведь расчёты-то, получаются ложными. Или нет?

Именно эти расчёты не ложные, но к ним нужна правильная интерпретация, которую образование не даёт. Чем сложнее формулы, тем меньше объяснений, что именно в реальности они обозначают. В результате сложная математика превращается в мусор, а мозг от мусора стремится избавляться во время сна например, такая у него функция, необходимая чтобы человек не сошёл с ума.
Сквозняк
энтузиаст
 
Сообщения: 700
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение pupsik » 17.03.2017 20:49:52

vitaly_l вот реально... вы хоть читали что я ранее писал? Повторяю: 1 (единица), 0 (нуль) и много чего ещё (к примеру 100, если не ошибаюсь) - это не только число.
pupsik
энтузиаст
 
Сообщения: 1139
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение vitaly_l » 17.03.2017 20:58:03

Сквозняк писал(а):мозг от мусора стремится избавляться во время сна например, такая у него функция, необходимая чтобы человек не сошёл с ума.

Мозг во время сна, делает совсем иное.

Не парьтесь, я просто запоминал, факт, о том что, в компьютере сбой при 0.1 (к вопросу о работе мозга)... и заодно прописал это всем кто здесь, это всё читает, т.к. теперь вы будете это помнить, т.к. по сути я поставил мощный якорь. И самое главное в этом топике, привёл zub, и об этом баге с 0.1 всегда нужно помнить, т.к. реально самолёты могут падать, если программист не знает об этом баге. Подробно, изложено вот здесь: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


.
Последний раз редактировалось vitaly_l 17.03.2017 21:02:37, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение zub » 17.03.2017 21:01:46

Это не баг. И не особенность. Так и должно быть!
Если ты это не понимаешь - забудь и продолжай формошлепать.
zub
долгожитель
 
Сообщения: 2528
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение vitaly_l » 17.03.2017 21:11:39

zub писал(а):Это не баг. И не особенность. Так и должно быть!
Если ты это не понимаешь - забудь и продолжай формошлепать.

Может это и не баг, но это очень важный факт:
Код: Выделить всё
Просто число 0.1 не представимо в виде конечной двоичной дроби, оно равно 0.0(0011). И эта бесконечная двоичная дробь обрубается на 24-ёх знаках; мы получаем не 0.1, а некоторое приближённое число ( 0.100000001490116 ). поэтому

var R:Single;
begin
  R:=0.1;
  if R=0.1
    then x := 'Равно' 
    else х := 'Не равно'; <== вернёт это...
end;

Я сейчас реально полезу смотреть код и проверять, а нет ли у меня в коде, таких подводных камней.


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

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

Сообщение zub » 18.03.2017 00:14:16

В модуле math есть такая функция:
Код: Выделить всё
...
{$ifdef FPC_HAS_TYPE_EXTENDED}
function SameValue(const A, B: Extended): Boolean;inline; overload;
{$endif}
{$ifdef FPC_HAS_TYPE_DOUBLE}
function SameValue(const A, B: Double): Boolean;inline; overload;
{$endif}
function SameValue(const A, B: Single): Boolean;inline; overload;
{$ifdef FPC_HAS_TYPE_EXTENDED}
function SameValue(const A, B: Extended; Epsilon: Extended): Boolean; overload;
{$endif}
{$ifdef FPC_HAS_TYPE_DOUBLE}
function SameValue(const A, B: Double; Epsilon: Double): Boolean; overload;
{$endif}
function SameValue(const A, B: Single; Epsilon: Single): Boolean; overload;
...

ее и пользуй

Добавлено спустя 6 минут 3 секунды:
Код: Выделить всё
uses math;
const
     EPS_single=10e-8;
var R:Single;
begin
  R:=0.1;
  if R=0.1
    then writeln('=')
    else writeln('<>');

  if SameValue(R,0.1,EPS_single)
    then writeln('=')
    else writeln('<>');

  readln;
end.
zub
долгожитель
 
Сообщения: 2528
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение vitaly_l » 18.03.2017 00:42:50

zub писал(а):ее и пользуй


А такую морковку, куда девать, если вместо ноля, я вижу явно неправильную организацию работы с двоичным кодом?
(точнее вижу миллионы дикарей в академиях наук, которые к 2017 году, не решили задачу для школьников)
Код: Выделить всё
var R:Single;
    I:Integer;
    s:string;
begin
   R:=1;
   for I:=1 to 10 do
    R:=R-0.1;
    writestr(s,R:2:16);
    writeln('R = ' +s);
  readln;
end. 

это реально "падающие" приборы, спутники, самолёты и АЭС, особенно если программист не знает про 0.1
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение zub » 18.03.2017 01:03:02

>>"падающие" приборы, спутники, самолёты и АЭС, особенно если программист не знает про 0.1
чето ты перевозбудился сегодня. художник не знает. програмист знает.
Это числа с плавающей точкой - ты никогда не увидишь ровно сколькото. ты увидишь сколькото+-eps
Код: Выделить всё
uses math;
const
     EPS_single=10e-8;
var R:Single;
    I:integer;
begin
  R:=1;
  for I:=1 to 10 do
    R:=R-0.1;

  if SameValue(R,0,EPS_single)
    then writeln('Принять седуксенчика и лечь спать')
    else writeln('Всё пропало! мы все умрем!');

  readln;
end.
Последний раз редактировалось zub 18.03.2017 01:04:51, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2528
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Step » 18.03.2017 01:04:17

Пять содержится в десяти только два раза - 10:5=2.
5 в 5-один(1)раз: 5:5=1(один).
0,5 в 0,5-один(1)раз: 0,5:0,5=1(один).
Step
новенький
 
Сообщения: 45
Зарегистрирован: 08.02.2013 00:35:21

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

Сообщение vitaly_l » 18.03.2017 01:11:40

Step писал(а):0,5 в 0,5-один(1)раз: 0,5:0,5=1(один).

При такой постановке задачи, Ваше решение верное. А при постановке задачи о делении морковок на детей, придётся изменить условие задачи в процессе решения. Вот только компьютер об этом не знает. Вначале он делил 5 морковок на 5 детей, а как только детей и морковок стало меньше единицы, то условие задачи автоматом меняется. Однако компьютер об этом не знает и возвращает априори ложное решение, равное 1.

Добавлено спустя 12 минут 21 секунду:
zub писал(а):  if SameValue(R,0,EPS_single)
    then writeln('Принять седуксенчика и лечь спать')
    else writeln('Всё пропало! мы все умрем!');

Ответ ложный, т.к. мы все умрём, постольку поскольку смертны.

И потому что, в коде, Вы проверяете на true и оно явно не возвращает значение R, а лишь позволяет сравнить и получить boolean.
Код: Выделить всё
var R:Single;
    I:Integer;
    s:string;
begin
   R:=1;
   for I:=1 to 10 do
    R:=R-0.1;
    writestr(s,R:2:16);
    writeln('R = ' +s); <=== напечатает явно не ноль и все АЭС выйдут из строя в один судный день, одну минуту и одну секунду.
  readln;
end. 
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение zub » 18.03.2017 01:39:37

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

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

Сообщение sign » 18.03.2017 07:07:57

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

Да нормально у него с проверками.
Ну, вот как с 28-ю танками: https://youtu.be/1k8AxQ77cu8

:mrgreen:
sign
энтузиаст
 
Сообщения: 1104
Зарегистрирован: 30.08.2009 09:20:53

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

Сообщение Сквозняк » 18.03.2017 16:28:26

vitaly_l писал(а):Мозг во время сна, делает совсем иное.

Мозг во время сна в том числе чинит организм и задаёт пути развития. Всякая мусорная информация при этом отправляется в утиль. А вот зачем сложную математику преподают в виде мусора, спросите у профессионалов :mrgreen:

Добавлено спустя 7 минут 42 секунды:
vitaly_l писал(а):это реально "падающие" приборы, спутники, самолёты и АЭС, особенно если программист не знает про 0.1

В реальности на микроуровне в материи всё равно турбулентность - всего нельзя подсчитать, потому приблизительные округлённые расчёты в среднем могут быть даже точнее сверхточных.
Сквозняк
энтузиаст
 
Сообщения: 700
Зарегистрирован: 29.06.2006 22:08:32

Пред.След.

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

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

Сейчас этот форум просматривают: bormant и гости: 7

Рейтинг@Mail.ru