Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.45.153] |
|
Сообщ.
#1
,
|
|
|
подскажите, плиз, что значит решение на Фортране получено с одинарной или двойной точностью.
например, в Дельфи можно использовать real или double или их комбинацию. А в Фортране можно использовать только одну точность во всей программе? |
Сообщ.
#2
,
|
|
|
Я так понимаю, что это означает использование только single или только double во всей проге, хотя преобразование вещественных Фортран должен поддерживать, точность-то все равно теряется
|
Сообщ.
#3
,
|
|
|
Vesper,
Цитата , т.е. если писать используя и singlе, и double результат получу singlе. И тут нет никакого отличия от других языков программирования?точность-то все равно теряется а что означают такие комментарии(не перевод, а смысл)? 1. Цитата C The output from this program (on a Cray-1 in single precision) C is as follows. 2. Цитата C Note to Cray users: C For maximum efficiency, use the CFT77 compiler. Appropriate C compiler optimization directives have been inserted for CFT77. мой перевод: 1. Результат работы программы (с использованием компилятора Cray-1, одинарая точность) следующий 2. Замечание для пользователей Cray компиляторов: для достижения маскимальной эффективности используйте компилятор CFT77. Соответсвтвующие директивы оптимизации компилятора приведены для CFT77. мое понимание: для Фортрина существует несколько разных компиляторов, для достижения эффективности нужно отдать предпочтение одному перед другим. мне, как разработчику на Дельфи, эти Фортран-комментарии "по-барабану"? p.s.проблема возникла из-за того, что я имею описание алгоритма на "прологе фортрана", в котором есть комментрарии, приведенные мною выше. |
Сообщ.
#4
,
|
|
|
tomsksmile, Да, их много. Тогда компы были менее быстрые, чем сейчас и нужна была оптимизация под процессор. По-моему для простых программ на нее можно смело забить.
|
Сообщ.
#5
,
|
|
|
Vesper,
Цитата По-моему для простых программ на нее можно смело забить. а для не простых? и не на Фортране? |
Сообщ.
#6
,
|
|
|
Дальше не знаю:(
|
Сообщ.
#7
,
|
|
|
Исторически сложилось так, что Fortran является самым многоплатформенным языком, а компьютеры имеют различную разрядность (даже старые суперкомьютеры имели разрядность превосходящую i8080/8087-->Pentium4), кроме того в Fortran предусмотрен комлекныйсный тип чисел. Сушествует эмпирическое правило производит проверочные расчеты с удвоенным числом знаков мантиссы и порядка (если результаты были близки, то можно смело и дальше решать аналогичные задачи с обычной точностью -- экономя память и возможно увеличивая быстродействие *). Видимо в силу этой причины и появилось понятие обычной и удвоенной точности.
Далее цитата из Help-а Delphi Type Range Significant digits Size in bytes Real48 2.9 x 10^–39 .. 1.7 x 10^3811–12 6 Single 1.5 x 10^–45 .. 3.4 x 10^387–8 4 Double 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8 Extended 3.6 x 10^–4951 .. 1.1 x 10^493219–20 10 Comp –2^63+1 .. 2^63 –1 19–20 8 Currency –922337203685477.5808.. 922337203685477.5807 19–20 8 The generic type Real, in its current implementation, is equivalent to Double. Type Range Significant digits Size in bytes Real 5.0 x 10^–324 .. 1.7 x 10^308 Легко заметить, что разрядность Single и Double отличаются в 2 раза, но внутри сопроцессора, независимо от представления в памяти, все операции производятся над 10-байтовыми числами -- Extended Разрядность чисел в Cray, думаю, можно легко найти. * -- анализ точности вычислений отдельная и доволно обширная тема. P.S. В Фортране в оной программе можно смешивать одинарую и двойную точность, компилятор все расставит на свои местаю |
Сообщ.
#8
,
|
|
|
PAV,
Цитата все операции производятся над 10-байтовыми числами -- Extended а как же быть с предупреждением в Дельфи при испозовании Extended. Мол могут возникнуть проблемы при переносе программы на другую платформу. Цитата можно смешивать одинарую и двойную точность т.е. все будет с одинарной точностью? на www.netlib.org полно программ на фортране, которые (как написано в описании) запрограммированы с одинарной или двойной точностью (т.е. одна и таже программа с разной точностью). можно ли сразу "в леТ" определить с какой точностью она написана без компилирования, а только по коду? |
Сообщ.
#9
,
|
|
|
Если переменные описаны как double, значит двойная точность
|
Сообщ.
#10
,
|
|
|
to tomsksmile
Цитата а как же быть с предупреждением в Дельфи при испозовании Extended. Мол могут возникнуть проблемы при переносе программы на другую платформу Предупреждение остается в силе, т.к. математический сопроцессор 8087--и далее, все числа с плавающей запятой и хранит (стек из 8 десятибайтовых регистров) и обрабатывает только в формате Extended и ни в каком другом -- это относится к его внутреннему устройству, а в основной памяти форматов хранения м.б. несколько (single, double, real48). Если память не изменяет, Антон Григорьев в DelphiKingdom написал несколько статей о тонкостях программирования с использованием сопроцессора. А лучше всего взять описание сопроцессора и потратить 1-2 дня на изучение его программирования на низком уровне чтобы понять какие коды генерирует компилятор, и как с точки зрения программиста выполняются арифметические операции. На netlib все программы довольно хорошо задокументированы, как провило библиотеки с различным представлением чисел лежат в разных директориях. Кроме того, формат представления переменных м.б. описан явно либо REAL, либо DOUBLE PRECISION. Относительно точности по умолчанию -- надо смотресть установку ключей конкретного компилятора. Константы ZERO = 0.0D+0, ONE = 1.0D+0, TWO = 2.0D+0 - двойная точность, ZERO = 0.0E+0, ONE = 1.0E+0, TWO = 2.0E+0 - одинарная точность. |