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

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

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

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

Сообщение Azazaz » 17.03.2017 17:37:16

Астанавитесь!

Код: Выделить всё
const
s: single = 0.1;
d: double = 0.1;
begin
Writeln(s = d);
end.

А разгадка проста: компилятор производит операции с плавающей точкой в Extended и результат обрезает что б впихнуть в целевой тип, по этому бинарное представление разнокалиберных real типов не совпадают.
Azazaz
новенький
 
Сообщения: 41
Зарегистрирован: 21.04.2015 20:00:03

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

Сообщение vitaly_l » 17.03.2017 17:39:34

Возьмите половину морковки... и поделите её на половину детского сада. И там и там 0.5 / 0.5, как у Вас получилась каждому 1 ?
:roll: Вы разделили половину морковки на 33 ребёнка. Откуда взялась 1? :wink:
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение pupsik » 17.03.2017 17:47:45

vitaly_l иногда, в странах экс (и не только) встречаются добрые белочки. У вас она не просто добрая, а ещё и огромная.
При обратной проверке - результат будет неправильный.
оп..па: новая теория? Всё: срочно докторскую и на нобелевку...

Добавлено спустя 2 минуты 3 секунды:
Ладно. Не мучайте детей: за вас уже ответили...
компилятор производит операции с плавающей точкой в Extended
pupsik
энтузиаст
 
Сообщения: 1142
Зарегистрирован: 20.08.2014 16:20:13

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

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

pupsik писал(а):оп..па: новая теория? Всё: срочно докторскую и на нобелевку...

Возьмите половину морковки... и поделите её на половину детского сада. И там и там 0.5 / 0.5, как у Вас получилась каждому 1 ?
:roll: Вы разделили половину морковки на 33 ребёнка. Откуда взялась 1? :wink:

Есть пять детей и пять морковок.
Делим 5 на 5 каждому достаётся одна морковка. <== вопросов не возникает.


А теперь пробуем поделить 0.5 морковки на 0.5 ребёнка.
Как Вам удалось, половине ребёнка, дать одну целую морковку, если изначально было 0.5 морковки?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Сквозняк » 17.03.2017 18:09:32

vitaly_l писал(а):Возьмите половину морковки... и поделите её на половину детского сада. И там и там 0.5 / 0.5, как у Вас получилась каждому 1 ?
Вы разделили половину морковки на 33 ребёнка. Откуда взялась 1?


Не каждому по 1, а целый детский сад получил бы одну на всех. Каждый ребёнок что в целом саду, что в его части получил бы одинаковый кусочек (при условии что делить будут честно) морковки. То есть мы имеем реальную половинку детского сада и складываем её с виртуальной - той, которой не хватает до целого состояния. Логично же.

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


И тут тоже самое - целая морковка будет состоять из реальной половинки и виртуального дополнителя до 1. И с ребёнком тоже самое - он из двух частей состоит :roll: И вот этот составной ребёнок получит составную морковку.
Сквозняк
энтузиаст
 
Сообщения: 752
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение serbod » 17.03.2017 18:15:41

vitaly_l писал(а):Знаешь сколько на земле атомных станций? А управляет ими что?

Написанный мною софт используется на режимных объектах, в том числе как минимум на одной атомной электростанции. Если я буду результат деления дополнительно делить на столько же, на сколько умножал при приведении к целому, то это обнаружит отдел сервиса и мне будет стыдно. А если обнаружат на объекте во время эксплуатации, то всякое может быть. В Беларуси разрешена смертная казнь. У меня уже был глюк с 540% уровня сигнала на первое апреля, все подумали что это такая шутка, но приказали так больше не шутить.
Аватара пользователя
serbod
постоялец
 
Сообщения: 443
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

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

Сообщение pupsik » 17.03.2017 18:23:25

serbod вы vitaly_l в штат не хотите взять?
Правда:
разрешена смертная казнь.
малость смущает. Но, в принципе, человек скоро докторскую защитит... основывая на морковке.

vitaly_l, может хватит под нуба косить?
pupsik
энтузиаст
 
Сообщения: 1142
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение vitaly_l » 17.03.2017 18:24:04

Сквозняк писал(а):Не каждому по 1, а целый детский сад получил бы одну на всех.

Гипотетически Вы верно посчитали. Но увы в детский сад привезли только половину морковки. Как Вам удалось половине детского сада дать целую? Гипотетически? В математике - это прокатит, а в реальности?
Сквозняк писал(а):И тут тоже самое - целая морковка будет состоять из реальной половинки и виртуального дополнителя до 1.

Всё верно гипотетически - это так. Но в детский сад привезли только половину морковки. Как получилось что она стала целой?

Но это мелочи, т.к. теперь поменяем морковку например на тротил или расчёт подачи горючего для ракеты:
1) В соответствии с ложной математикой, вы всегда вместо 0.1 тротила будете подавать гипотетичекую 1 и будет взрыв. Понимаете?
2) На атомной станции, вы всегда вместо 0.01 будете подавать свою гипотетическую 1 и будет взрыв АЭС. Понимаете?
3) В самолёте, приборы будут давать ложные показания.

Добавлено спустя 3 минуты 10 секунд:
pupsik писал(а):vitaly_l, может хватит под нуба косить?


Покажите здесь ошибку в коде?
Код 100% основан на математике и всегда вернёт 100% верное значение.
Код: Выделить всё
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.


serbod писал(а):Если я буду результат деления дополнительно делить на столько же, на сколько умножал при приведении к целому, то это обнаружит отдел сервиса и мне будет стыдно.


Я вначале умножаю на 1000, а потом делю на 1000. В чём моя ошибка? (я просто избавился от дроби, :roll: а потом вернул обратно :wink: )
Последний раз редактировалось vitaly_l 17.03.2017 18:51:02, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение pupsik » 17.03.2017 18:46:49

Покажите здесь ошибку в коде?
я уже отвечал. Пропустили? И подтягивать за уши то что не верно делаете - явно показатель не понимания того что вы делаете.

п.с.
Уж коли хотите о морковке....
Куда вы дели остальную? Почему так мало отдали детям? Вы уверены что будете дальше работать в д/с? Т.е., в реалиях, вы напрашиваетесь на, мягко говоря, неприятный разговор с лицами странной наружности и профессии.
Учитывая дальнейшую тематику:
теперь поменяем морковку например на ... или расчёт подачи горючего для ..

Вы напрашиваетесь на куда большие неприятности. И, если не изменяет память, подводите и админов форума к ним.
И уж коли охота потрепать по поводу "морковки". Создайте новую тему в соответствующем разделе.
pupsik
энтузиаст
 
Сообщения: 1142
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Сквозняк » 17.03.2017 18:50:33

vitaly_l писал(а):Гипотетически Вы верно посчитали. Но увы в детский сад привезли только половину морковки. Как Вам удалось половине детского сада дать целую? Гипотетически? В математике - это прокатит, а в реальности?
Именно что прокатит. Половине целого детского сада нужно дать половину же целой морковки. И эта половина есть в наличии! А виртуальной половине детского сада дадим виртуальную же половину морквы - скажем что дали и они не возмутятся в нашей реальности:))) И ведь работает же на практике.

Всё верно гипотетически - это так. Но в детский сад привезли только половину морковки. Как получилось что она стала целой?

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

Но это мелочи, т.к. теперь поменяем морковку например на тротил или расчёт подачи горючего для ракеты:
1) В соответствии с ложной математикой, вы всегда вместо 0.5 тротила будете подавать гипотетичекую 1 и будет взрыв. Понимаете?
2) На атомной станции, вы всегда вместо 0.5 будете подавать свою гипотетическую 1 и будет взрыв АЭС. Понимаете?
3) В самолёте, приборы будут давать ложные показания.


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

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

Сообщение serbod » 17.03.2017 18:55:31

vitaly_l писал(а):Я вначале умножаю на 1000, а потом делю на 1000. В чём моя ошибка? (я просто избавился от дроби, а потом вернул обратно)

Умножаются ведь обе части дроби, поэтому результат деления не изменится. Что 0.5/0.5, что 5/5, что 50/50 - результат будет одинаков.

Добавлено спустя 1 минуту 48 секунд:
Если уж делить обратно, то тоже обе части дроби 1/1 :D
Аватара пользователя
serbod
постоялец
 
Сообщения: 443
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

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

Сообщение vitaly_l » 17.03.2017 18:58:46

Сквозняк писал(а):ништяк

фигня это всё, в коде просто ненужно было делить на 1000 в этом serbod прав.

А вот :roll: в примере с морковкой :wink: ...

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

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


Всё гораздо забавнее, но Пупсик против флуда, поэтому я удаляюсь. Всем хорошего вечера и настроения.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение pupsik » 17.03.2017 19:02:32

но Пупсик против флуда, поэтому я удаляюсь.
ну во..от я виноват :)
Я же указал: создайте тему и флудите. Но, желательно, не на скользкие темы.
pupsik
энтузиаст
 
Сообщения: 1142
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение vitaly_l » 17.03.2017 19:29:36

pupsik писал(а):ну во..от я виноват

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

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

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


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

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

Сообщение Сквозняк » 17.03.2017 19:40:24

vitaly_l писал(а): А как только мы подключаем математику, то 0.5 морковки превращаются в целую,


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

Пред.След.

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

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

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

Рейтинг@Mail.ru