Странное поведение Real

Форум для изучающих FPC и их учителей.

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

Re: Странное поведение Real

Сообщение Иван Шихалев » 02.11.2010 23:04:50

Max Rusov писал(а):в x64 Extended вообще не поддерживается

Откуда инфа?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Странное поведение Real

Сообщение Max Rusov » 03.11.2010 11:46:11

Иван Шихалев писал(а):Откуда инфа?

viewtopic.php?p=39785#p39785
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Странное поведение Real

Сообщение Jargar » 03.11.2010 12:59:37

Max Rusov писал(а):Более того, в x64 Extended вообще не поддерживается,


Но сопроцессор можна использовать

Помимо увеличенной возможности адресации 64-х разрядные процессоры предлагают новые вычислительные возможности в виде новых регистров и команд. Также накладываются дополнительные ограничения и соглашения. К примеру, рассматривая x86-64: математический сопроцессор считается устаревшим. Его использование не поощряется, хотя и технически возможно. Вместо сопроцессора можно использовать 64-х разрядные регистры или SSE. Имеются более строгие требования к выравниванию данных. Особенно на стеке. Модель вызова - только одна. Ключевые слова типа stdcall, register и т.п. игнорируются. По этим трём причинам (сопроцессор, выравнивание + передача вещественных чисел в SSE-регистрах), Extended (10 байт, родной для мат-сопроцессора) в мире x64 становится очень уж неудобным. Возможно, он будет как-то изменён в грядущей Delphi x64 (либо приравняют к Double или Single, как это делает Free Pascal, либо пометят как deprecated, либо оставят как есть, но работа с ним может быть не оптимальной). x86-64 даёт вам 16 64-х разрядных регистров и 16 128-ми разрядных XMM-регистров (для вещественных чисел). Для сравнения: у x86-32 есть только 8 32-х разрядных регистров (если я правильно сосчитал), остальное - это сопроцессор (8 80-т битных регистра) и расширения. Т.е. x86-64 практически удваивает набор регистров, разве что регистры для вещественных чисел имеют уменьшенную до Double размерность. Напомню, сам сопроцессор никуда не уходит, но его использование не поощряется. Сопроцессор также не участвует в единственной для x64 модели вызова.


http://www.gunsmoker.ru/2010/11/64-windows.html
Jargar
новенький
 
Сообщения: 21
Зарегистрирован: 06.11.2007 14:42:24

Re: Странное поведение Real

Сообщение informat » 03.11.2010 21:03:23

Почему то ни кто не спросил, а какую задачу должна решать программа.

Может быть нужно совсем не так делать.
Например, ответ нужен не в десятичных дробях, а в обыкновенных.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Странное поведение Real

Сообщение Timid » 04.11.2010 01:18:51

2 lillgrinn,
Вы правы и неправы одновременно, создавая указанный код.

Первая проблема, которую Вы не заметили - это ситуация "минус нуля", которая всегда существует при наращивании значения отрицательного числа.
Формально -0 не равен +0. И лог Вам это явно показывает. Попробуйте "мотать" цикл в обратную сторону и посмотрите на листинг.

Вторая проблема - Вы составили цикл с фиксированным шагом, зачем Вы использовали переменную с плавающей запятой в качестве условного "счетчика цикла"? Гораздо вернее установить X целым, а в выражениях делить на 10.

Третья проблема - проблема плавающей точки, вернее, степени, выражаемой в типе реал 7-ю (кажется) битами. Двоичное представление 0.2 = 0.00110011, далее нужно его перевести в формат хранения real и т.п.

Но главное, согласно http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой, для правильной отработки операции сравнения с нулем, необходимо, чтобы библиотека вычислений устанавливала специальный флаг - "Ноль" в результате операции. Видимо, библиотека софтварной эмуляции для типа real это не делает. А вот сопроцессор, работая с extended - делает :)
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Пред.

Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru