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

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

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

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

Сообщение vitaly_l »

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

Ну так и надо было сказать, сразу! Вот мол, так и так, мультиуважаемые художники, с просони оговорился. А то, придумал тоже: бумажки... карандашики...

В общем выяснили: баг в арифметику - заложили производители процессоров :roll: и разработчики FPC - не виноваты :wink: . Дальше флуд можно не продолжать.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

vitaly_l и более менее осознание происходящего у вас наступило на 11 стр...
А то, придумал тоже: бумажки... карандашики..
правильно "придумал". Взяли бы вы их ранее... :lol:
MylnikovDm
постоялец
Сообщения: 103
Зарегистрирован: 15.02.2007 20:26:10
Откуда: Челябинск

Сообщение MylnikovDm »

Ну вы, ребята, даёте. :) Аж целых 11 страниц написали.

Кстати, интересно, любители точных вычислений и типа extended в курсе, что он работает только на 80х86 процессорах в 32 битном режиме?

А на x64 и других процессорах никакого extended нет, это псевдоним типа double.
Extended

For Intel 80x86 processors, the extended type takes up 10 bytes of memory space. For more information on the extended type, consult the Intel Programmer’s reference.

For all other processors which support floating point operations, the extended type is a nickname for the type which supports the most precision, this is usually the double type. On processors which do not support co-processor operations (and which have the {$E+} switch), the extended type usually maps to the single type.

http://www.freepascal.org/docs-html/prog/progsu159.html#x203-2080008.2.5
SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Сообщение SAK »

vitaly_l писал(а):В общем выяснили: баг в арифметику - заложили производители процессоров :roll: и разработчики FPC - не виноваты :wink: . Дальше флуд можно не продолжать.

Никто никуда никакого бага не вносил, это естественная потеря точности при переводе из одной системы счисления (десятичной) в другую (двоичную) и наоборот.
Аналогичная проблема: верно ли равенство 1/3 = 0.333333333? Можете ли Вы записать десятичную дробь с фиксированным числом разрядов абсолютно точно равную 1/3?

А ещё в математике есть понятие бесконечной периодической дроби и 1/3 = 0.(3) - это точное значение, а 2/3 = 0.(6) - это тоже точное значение.
Сложим левые и правые части приведённых равенств 1/3 + 2/3 = 0.(3) + 0.(6) и получим 1 = 0.(9)
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

SAK писал(а):Никто никуда никакого бага не вносил, это естественная потеря точности при переводе из одной системы счисления (десятичной) в другую (двоичную) и наоборот.
По логике разработчикам фрипаскаля следовало бы отождествить extended с long double для х64. И всё было бы нормально.
MylnikovDm
постоялец
Сообщения: 103
Зарегистрирован: 15.02.2007 20:26:10
Откуда: Челябинск

Сообщение MylnikovDm »

long double для x64 является псевдонимом всё того же double. Как 128 бит данный тип работает в C и C++ только на некоторых RISC процессорах, например серии SPARC или IBM Power или в специально написанных для этого варианта библиотеках, где вычисления делаются программно, а не микрокодом самого процессора или сопроцессора. В документации по компилятору Microsoft прямо сказано, что для x64 типы long double и просто double равны.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Кстати!
Буквально сегодня наткнулся на паскалевские библиотеки работы с числами высокой разрядности:
http://wolfgang-ehrhardt.de/misc_en.html
MPArith, AMath, DAMath
Заявлена поддержка FPC/Delphi для 32/64 бит. Пока не разбирался, но последние фиксы довольно свежие.
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Снег Север, спасибо за сайт, выглядит очень любопытно!
ElectroGuard
новенький
Сообщения: 71
Зарегистрирован: 03.06.2016 11:10:22

Сообщение ElectroGuard »

vitaly_l писал(а):
zub писал(а):>>Стоп!!! Компилятор??? Или процессор?
Берешь в руки бумажку с карандашем и расписываешь 0.7 по битикам. когда распишешь - перегоняешь обратно в десятичную систему - сразу станет ясно кто виноват - Компилятор??? Или процессор?

Ну так и надо было сказать, сразу! Вот мол, так и так, мультиуважаемые художники, с просони оговорился. А то, придумал тоже: бумажки... карандашики...

В общем выяснили: баг в арифметику - заложили производители процессоров :roll: и разработчики FPC - не виноваты :wink: . Дальше флуд можно не продолжать.


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

Сообщение Лекс Айрин »

ElectroGuard, не бери в голову...это все со скуки.
ElectroGuard
новенький
Сообщения: 71
Зарегистрирован: 03.06.2016 11:10:22

Сообщение ElectroGuard »

Ок :)
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

вы еще сумму ндс не вспоминали ?
Ответить