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

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

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

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

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

vitaly_l писал(а):Вообще-то, в другие языки уже встраивают и это не только в С



Не стоит путать язык и реализацию. Если платформа не поддерживает данного вещественного типа, то и реализация невозможна или сильно затруднена. В любом случае, основные типы определяются в самом языке и не могут быть перекрыты. (не должны перекрываться).
Кстати, описанный там формат не более чем грязный хак. Пусть даже и аппаратный. И, если проводить вычисления, то не в режиме фиксированной точки, а с плавающей, а потом преобразовывать обратно. А значит, все недостатки остаются прежними.
По хорошему, в формате с фиксированной точкой должны быть программно недоступные 1-2 разряда, которые обнуляются после присваивания. Судя по всему, формат с фиксированной точкой просто не оправдал ожиданий, так как применим в не таких уж частых случаях.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение Сквозняк » 20.03.2017 19:41:27

Лекс Айрин писал(а):Судя по всему, формат с фиксированной точкой просто не оправдал ожиданий, так как применим в не таких уж частых случаях.


А что у нас в fpc кроме типа Currency с фиксированной точкой есть? Четыре знака после запятой, это как-то мало. Чтобы подсесть на этот тип, сначала нужно просчитать, а хватит ли разрядов для задачи сейчас и в будущем. А вдруг что-то добавится и разрядов не хватит? Лотерея.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение Лекс Айрин » 20.03.2017 19:53:42

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

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

Сообщение Снег Север » 20.03.2017 21:31:06

Сквозняк писал(а):Четыре знака после запятой, это как-то мало.
Мало для чего? Для финансов - хватает, а больше это ни для чего не надо, надо читать книжки по алгоритмам устойчивым к ошибкам округления. Поскольку проблема плавающей арифметики появилась с первыми ЭВМ, вопрос этот решен еще полвека назад.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение Сквозняк » 21.03.2017 02:23:51

Снег Север писал(а):Мало для чего?

Допустим, центр экрана это 0, правый край 1, а левый -1. А теперь заменим переменную с плавающей запятой на переменную с 4 знаками после запятой и будем дрожать на разрешение экрана, как бы оно в переменную вписалось.

Для финансов - хватает, а больше это ни для чего не надо

Предлагаешь всем обрезаться каменным ножом, одеть лапсердак и заделаться банкирами? Так если все будут грабить, то некого станет!

Поскольку проблема плавающей арифметики появилась с первыми ЭВМ, вопрос этот решен еще полвека назад.

Теоретически а не практически, иначе логику работы с Double не колбасили бы при выходе новой версии компилятора.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение Дож » 21.03.2017 03:17:19

Теоретически а не практически, иначе логику работы с Double не колбасили бы при выходе новой версии компилятора.

В этой теме до сих пор нет доказательств того, что логика работы с Double поменялась. (Наоборот, согласно запускам zub'а, она не поменялась.)

Зато есть 10 страниц флуда.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение Sergei I. Gorelkin » 21.03.2017 03:42:16

"Логику работы с Double" никто не трогал. Переписали процедуры преобразования чисел с плавающей точкой в строку и обратно. Старые могли давать ошибку в последних примерно 10 младших битах, из-за чего вообще нельзя было вести речь о кроссплатформенной математике. Новые тоже ошибаются, но максимум на 1 бит и на немногих значениях.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение sign » 21.03.2017 06:32:55

vitaly_l писал(а):
sign писал(а):И, вместо того, чтобы осознав, что есть место тонкостям и нюансам, которые должно изучить, они, эти альтернативно одарённые, бегают и вопиют, обвиняя окружающих в чём угодно, кроме обвинения себя в безграмотности!
Демонстрируя окружающим свою глубокую альтернативность.

Ну почему все программисты должны изощряться, если это должно решаться ещё на аппаратном уровне?

Не нужно изощряться.
Нужно изучать матчасть, а не вскидываться, налетев на очередное своё незнание.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

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

Сообщение Снег Север » 21.03.2017 09:09:03

Сквозняк писал(а):Допустим, центр экрана это 0, правый край 1, а левый -1. А теперь заменим переменную с плавающей запятой на переменную с 4 знаками после запятой и будем дрожать на разрешение экрана, как бы оно в переменную вписалось.
Вообще-то это - хороший пример, как создать себе геморрой на пустом месте. Для переменной типа double нет никаких проблем с разрешением экрана, знаков хватает. Если вам неудобно сверлить пилой, то не пила в этом виновата.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение vitaly_l » 21.03.2017 11:02:04

Снег Север писал(а):хороший пример, как создать себе геморрой на пустом месте.

Физик - всего знать невозможно. Вот пример, проф программист, говорит:
zub писал(а):итог - какраз у меня вычислино более точно, т.к. результат еденице не равен))

И всё таки результат деления: if ((0.7-0.3)/(0.5-0.1))=1 then - должен быть равен единице, ну по крайней мере в математике. Причина Вашего утверждения, что if ((0.7-0.3)/(0.5-0.1))=1 then не равно единице - теперь мне понятна, т.к. все операции проводятся в Extended, а там вычитаются совсем не те значения, что написаны. Соответственно, бессмысленно спорить на тему double и single, т.к. при вычислениях, как выяснилось, без разницы как оно объявлено. И кстати currency - не решает задачу, т.к. тоже считает в Extended.
Сквозняк писал(а):Раньше числа с плавающей запятой обрабатывались по борландовски, правильно - ячейки памяти с мусором усекались и в дальнейшем не использовались.

Как она узнавала что мусор, а что не мусор, если всё считается в Extended?
Sergei I. Gorelkin писал(а):Логику работы с Double" никто не трогал. Переписали процедуры преобразования чисел с плавающей точкой в строку и обратно. Старые могли давать ошибку в последних примерно 10 младших битах, из-за чего вообще нельзя было вести речь о кроссплатформенной математике. Новые тоже ошибаются, но максимум на 1 бит и на немногих значениях.

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

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

Сообщение zub » 21.03.2017 12:03:42

>>И всё таки результат деления: if ((0.7-0.3)/(0.5-0.1))=1 then - должен быть равен единице
Ты с завидным упорством рисуешся не в лучшем свете)) нету в "плавающей точке" точных значений и результат этого выражения равен еденице, но только не точно, а +-eps
Как собственно и сами числа 0.7, 0.3, 0.5, 0.1 - после того как их проглотит компилятор - это чуток другие числа
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Дож » 21.03.2017 12:12:05

0.5 как раз таки не потеряет точности :)
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение zub » 21.03.2017 12:27:45

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

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

Сообщение vitaly_l » 21.03.2017 12:28:37

Дож писал(а):0.5 как раз таки не потеряет точности :)

от этого не легче.
zub писал(а):после того как их проглотит компилятор - это чуток другие числа

Стоп!!! Компилятор??? Или процессор?

1) Если это компилятор, то - это явно БАГ...
2) Если процессор, то - это неправильная организация работы с двоичным кодом в Intel и т.п.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение zub » 21.03.2017 17:24:00

>>Стоп!!! Компилятор??? Или процессор?
Берешь в руки бумажку с карандашем и расписываешь 0.7 по битикам. когда распишешь - перегоняешь обратно в десятичную систему - сразу станет ясно кто виноват - Компилятор??? Или процессор?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

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

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

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

Рейтинг@Mail.ru