2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Pascal
Сообщение18.11.2009, 18:53 
Посоветуйте, как можно в Pascal получить 20+ знаков после запятой или это невозможно?

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

 
 
 
 Re: Pascal
Сообщение19.11.2009, 13:15 
EtCetera в сообщении #263284 писал(а):
. Впрочем, Extended, если не ошибаюсь, поддерживает такое же количество.

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

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

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

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

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

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

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 01:07 
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 
Circiter в сообщении #264011 писал(а):
тип Comp во многих реализациях и диалектах паскаля очень тормознутый и часто существует более подходящая ему замена в лице типа Int64

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

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 14:42 

(Оффтоп)

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 15:17 

(Оффтоп)

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 15:34 

(Оффтоп)

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 18:24 

(Оффтоп)

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 18:35 

(Оффтоп)

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 18:46 

(Оффтоп)

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

 
 
 
 Re: Pascal
Сообщение21.11.2009, 19:05 

(Оффтоп)

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

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

 
 
 [ Сообщений: 24 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group