На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > точность вычислений на Фортране
      подскажите, плиз, что значит решение на Фортране получено с одинарной или двойной точностью.
      например, в Дельфи можно использовать real или double или их комбинацию. А в Фортране можно использовать только одну точность во всей программе?
        Я так понимаю, что это означает использование только single или только double во всей проге, хотя преобразование вещественных Фортран должен поддерживать, точность-то все равно теряется
          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.проблема возникла из-за того, что я имею описание алгоритма на "прологе фортрана", в котором есть комментрарии, приведенные мною выше.
            tomsksmile, Да, их много. Тогда компы были менее быстрые, чем сейчас :) и нужна была оптимизация под процессор. По-моему для простых программ на нее можно смело забить.
              Vesper,
              Цитата
              По-моему для простых программ на нее можно смело забить.

              а для не простых? и не на Фортране?
                Дальше не знаю:(
                  Исторически сложилось так, что Fortran является самым многоплатформенным языком, а компьютеры имеют различную разрядность (даже старые суперкомьютеры имели разрядность превосходящую i8080/8087-->Pentium4), кроме того в Fortran предусмотрен комлекныйсный тип чисел. Сушествует эмпирическое правило производит проверочные расчеты с удвоенным числом знаков мантиссы и порядка (если результаты были близки, то можно смело и дальше решать аналогичные задачи с обычной точностью -- экономя память и возможно увеличивая быстродействие *). Видимо в силу этой причины и появилось понятие обычной и удвоенной точности.

                  Далее цитата из Help-а Delphi

                  ExpandedWrap disabled
                     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.
                  В Фортране в оной программе можно смешивать одинарую и двойную точность, компилятор все расставит на свои местаю
                  Сообщение отредактировано: PAV -
                    PAV,
                    Цитата
                    все операции производятся над 10-байтовыми числами -- Extended


                    а как же быть с предупреждением в Дельфи при испозовании Extended. Мол могут возникнуть проблемы при переносе программы на другую платформу.

                    Цитата
                    можно смешивать одинарую и двойную точность

                    т.е. все будет с одинарной точностью?

                    на www.netlib.org полно программ на фортране, которые (как написано в описании) запрограммированы с одинарной или двойной точностью (т.е. одна и таже программа с разной точностью). можно ли сразу "в леТ" определить с какой точностью она написана без компилирования, а только по коду?
                    Сообщение отредактировано: Vesper -
                      Если переменные описаны как double, значит двойная точность
                        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 - одинарная точность.
                        Сообщение отредактировано: PAV -
                        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0247 ]   [ 14 queries used ]   [ Generated: 19.05.24, 04:33 GMT ]