2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Pascal
Сообщение18.11.2009, 18:53 


02/11/09
68
Посоветуйте, как можно в Pascal получить 20+ знаков после запятой или это невозможно?

 Профиль  
                  
 
 Re: Pascal
Сообщение18.11.2009, 19:57 
Заслуженный участник


28/04/09
1933
Если не ошибаюсь, в Pascal'е был тип Comp, поддерживающий $19\dots 20$ значащих цифр (правда, это тип чисел с фиксированной запятой). Впрочем, Extended, если не ошибаюсь, поддерживает такое же количество. Правда, памяти он кушает на 2 байта больше, из-за того, что у него запятая "плавает", причем в весьма широких пределах.
Что касается $20+$ всегда есть возможность "ручной" реализации длинной "плавающей" арифметики. Конечно, такие штуки обычно работают гораздо медленнее (по сравнению со своими сестрами, базирующимися на аппаратной поддержке), зато - точнее.

 Профиль  
                  
 
 Re: Pascal
Сообщение19.11.2009, 13:15 
Заслуженный участник


11/05/08
32166
EtCetera в сообщении #263284 писал(а):
. Впрочем, Extended, если не ошибаюсь, поддерживает такое же количество.

Extended -- это стандартный десятибайтовый формат процессора. Держит он 19-20 десятичных цифр.

EtCetera в сообщении #263284 писал(а):
Правда, памяти он кушает на 2 байта больше, из-за того, что у него запятая "плавает", причем в весьма широких пределах.

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

EtCetera в сообщении #263284 писал(а):
Если не ошибаюсь, в Pascal'е был тип Comp, поддерживающий $19\dots 20$ значащих цифр (правда, это тип чисел с фиксированной запятой).

Это -- Очень Странный Тип. Фактически (по внутреннему формату) он целый, но синтаксически -- вещественный. Дробные части результатов просто отбрасываются (точнее, округляются).

 Профиль  
                  
 
 Re: Pascal
Сообщение20.11.2009, 20:54 
Заслуженный участник


28/04/09
1933
ewert
ewert в сообщении #263455 писал(а):
Это -- Очень Странный Тип.
Не такой уж и странный. Обычный вещественный тип с фиксированной запятой. Очень удобен в ситуациях, когда заранее известен диапазон чисел, с которыми придется иметь дело. В результате нет лишних расходов памяти на порядок (ну и скорость вычислений побольше, по крайней мере, в теории).
ewert в сообщении #263455 писал(а):
Плавает она ровно так же, как и в остальных трёх стандартных форматах с плавающей точкой.
Я имел в виду лишь то, что она "плавает" в сравнении с жестко приколотой запятой типа Comp (и аналогичных ему типов с фиксированной запятой, коих в Pascal'е больше не наблюдается). У остальных вещественных типов с плавающей запятой ее способности акванавта ровно те же (ни кроль, ни брасс ей освоить так и не удалось; плавает, как и все, по-собачьи), просто бассейн у нее несколько больше по размерам.

 Профиль  
                  
 
 Re: Pascal
Сообщение20.11.2009, 21:05 
Заслуженный участник


09/08/09
3438
С.Петербург
EtCetera в сообщении #263953 писал(а):
ewert
ewert в сообщении #263455 писал(а):
Это -- Очень Странный Тип.
Не такой уж и странный. Обычный вещественный тип с фиксированной запятой.
Насколько я помню, Comp - это просто 64-разрядное целое со знаком. Я помню неправильно?

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 01:07 
Заслуженный участник


26/07/09
1559
Алматы
2EtCetera
Цитата:
ewert в сообщении #263455 писал(а):
EtCetera в сообщении #263284 писал(а):
Если не ошибаюсь, в Pascal'е был тип Comp

Это -- Очень Странный Тип. Фактически (по внутреннему формату) он целый, но синтаксически -- вещественный.

Не такой уж и странный. Обычный вещественный тип с фиксированной запятой.

Ну, как сказал Maslov, тип Comp соответствует 64 битным целым. Просто в pascal'е он формально считается вещественным, т.е. с ним нельзя обращаться как с порядковым, в частности, нельзя использовать стандартный инкремент/декремент. NB, тип Comp во многих реализациях и диалектах паскаля очень тормознутый и часто существует более подходящая ему замена в лице типа Int64 (в object pascal aka delphi он точно есть, а тип Comp оставлен из соображений обратной совместимости).

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 10:11 
Заслуженный участник


11/05/08
32166
Circiter в сообщении #264011 писал(а):
тип Comp во многих реализациях и диалектах паскаля очень тормознутый и часто существует более подходящая ему замена в лице типа Int64

Int64 -- это не замена Comp, с точки зрения языка (хотя хранятся они и совершенно одинаково). Int64 -- это нормальный целочисленный тип. В то время как Comp -- это со всех точек зрения вещественный тип, кроме одного: любой результат после приведения к этому типу округляется.

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 14:36 
Заслуженный участник


09/08/09
3438
С.Петербург
ewert в сообщении #264045 писал(а):
Comp -- это со всех точек зрения вещественный тип, кроме одного: любой результат после приведения к этому типу округляется
А ещё у него фиксированная точность. Поэтому, не кроме одного, а кроме двух.

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 14:42 
Заслуженный участник


11/05/08
32166

(Оффтоп)

В порядке занудства: что такое "фиксированная точность"?...

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 15:17 
Заслуженный участник


09/08/09
3438
С.Петербург

(Оффтоп)

ewert в сообщении #264095 писал(а):
В порядке занудства: что такое "фиксированная точность"?
Да ладно Вам, ну понятно же, что имеется в виду: абсолютная погрешность представления числа не зависит от абсолютной величины этого числа.
Это вам, математикам-преподавателям, за каждым словом следить приходится, а у нас, программистов-практиков, --- как сказалось, так и сказалось :mrgreen: .

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 15:34 
Заслуженный участник


11/05/08
32166

(Оффтоп)

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

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 18:24 
Заслуженный участник


09/08/09
3438
С.Петербург

(Оффтоп)

ewert в сообщении #264114 писал(а):
Но вот фраза типа "все эти числа имеют такую-то точность" -- у меня в голове уже не умещается.
Не, не числа имеют точность, а тип данных. Имеется в виду, что когда переменные данного типа используются для представления результатов вычислений, может возникать ошибка округления. Некоторые типы данных характеризуются постоянной относительной ошибкой округления (например, double), другие - постоянной абсолютной (integer, comp). Ну а точность - это величина, обратная ошибке, поэтому тоже бывает абсолютная (фиксированная) и относительная (плавающая).

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 18:35 
Заслуженный участник


11/05/08
32166

(Оффтоп)

я всегда считал, что числа целого типа не имеют вообще никакой погрешности -- именно потому, что вычисления с ними производятся абсолютно точно (в пределах правил этих вычислений, разумеется)

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 18:46 
Заслуженный участник


09/08/09
3438
С.Петербург

(Оффтоп)

ewert в сообщении #264186 писал(а):
я всегда считал, что числа целого типа не имеют вообще никакой погрешности -- именно потому, что вычисления с ними производятся абсолютно точно (в пределах правил этих вычислений, разумеется)
А почему обязательно с ними? Мы можем использовать переменную целого типа для представления результата операции с плавающей точкой, и в этом случае возникает ошибка округления.

 Профиль  
                  
 
 Re: Pascal
Сообщение21.11.2009, 19:05 
Заслуженный участник


11/05/08
32166

(Оффтоп)

не знаю, просто это откровенно неадекватно (с чисто программистской, да и прикладной точки зрения) -- представлять вещественный результат в целом виде.

Правда, я вот о чём подумал. Иногда возникает потребность округлить промежуточный результат до определённого числа знаков после запятой -- в чисто демонстрационных целях. Конечно, для этого можно воспользоваться функцией round, но это некоторая морока. Не исключено, что с типом Comp это можно организовать компактнее, как-нить на досуге подумаю.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group