Конференция "Прочее" » Более точные вещественные числа чем Extended?
 
  • Math (21.11.08 08:52) [0]
    Использую Дельфи 7. В новых версиях Дельфи есть вещественные числа, там скажем 128 битные или может даже ещё большей точности?

    Кстати, есть ли больше чем Int64?

    Спасибо. :)
  • Path (21.11.08 08:59) [1]
    Именно в Delphi - нет. А вам зачем ?
  • Math (21.11.08 09:09) [2]

    > Path   (21.11.08 08:59) [1]
    >
    > Именно в Delphi - нет. А вам зачем ?


    Для мат. расчётов.
    Есть библиотечки, но они тормозные. Хотелось бы, чтобы на уровне компилятора была работа с большими вещественными числами.
  • Math (21.11.08 09:11) [3]
    А в Delphi 2009 (или как там это теперь называте) тоже ничего такого нет?]
    Просто очень жаль, тогда.
  • KSergey © (21.11.08 09:15) [4]
    большую разрядность не поддерживает аппаратура IBM PC на данный момент.
    А значит увеличение разрядности - лишь программно, отсюда и существенные тормоза, компиляторы тут ни при чем.

    К стати есть мнение, что вам просто стоит пересмотреть организацию вычислений согласно давно наработанным рекомендациям.
  • Anatoly Podgoretsky © (21.11.08 09:20) [5]
    > KSergey  (21.11.2008 9:15:04)  [4]

    Наверно растояние до альфа центавры вычисляет с точностью до миллиметра.
  • Math (21.11.08 09:32) [6]

    > KSergey ©   (21.11.08 09:15) [4]
    >
    > большую разрядность не поддерживает аппаратура IBM PC на
    > данный момент.
    > А значит увеличение разрядности - лишь программно, отсюда
    > и существенные тормоза, компиляторы тут ни при чем.
    >
    > К стати есть мнение, что вам просто стоит пересмотреть организацию
    > вычислений согласно давно наработанным рекомендациям.


    Нет. Там очень большие с очень малыми складываются. В результате эта малость теряется, как будто её нет вообще, а это важно.

    А новых Дельфи есть какие-нибудь оптимизации компиляции под SSE различных версий?
  • Path (21.11.08 09:54) [7]

    > Для мат. расчётов.

    Я как-то догадался, что для расчётов - а не попу подтирать...


    > очень большие с очень малыми складываются. В результате эта малость теряется

    Используйте записи из двух чисел - одно для больших, другое для малых.

    Такое ощущение что вы никогда не работали ни с простыми дробями ни с комплексными числами. Может для начала подучить мат. ?
  • Anatoly Podgoretsky © (21.11.08 09:59) [8]
    > Path  (21.11.2008 9:54:07)  [7]

    Кроме того Extended это не ТОЧНОЕ
    Поэтому и здесь провал в знаниях.
  • Math (21.11.08 10:13) [9]

    > Path   (21.11.08 09:54) [7]
    >
    > > Для мат. расчётов.
    >
    > Я как-то догадался, что для расчётов - а не попу подтирать.


    А повежливей не пробовали?
  • oxffff © (21.11.08 10:18) [10]

    > KSergey ©   (21.11.08 09:15) [4]
    > большую разрядность не поддерживает аппаратура IBM PC на
    > данный момент.


    Зачем неправду говоришь?
  • Math (21.11.08 10:19) [11]

    > Anatoly Podgoretsky ©   (21.11.08 09:59) [8]
    >
    > > Path  (21.11.2008 9:54:07)  [7]
    >
    > Кроме того Extended это не ТОЧНОЕ


    Никто и не говорил, что это ТОЧНОЕ. Так, что это у вас провал в знаниях. А также приступ немотивированной агрессии.
  • icWasya © (21.11.08 10:23) [12]

    > oxffff ©   (21.11.08 10:18) [10]
    > Зачем неправду говоришь?

    А у Вас есть более точная информация об этом ?
  • oxffff © (21.11.08 10:32) [13]

    > Math   (21.11.08 08:52)  


    ASM в руки.

    This chapter describes the 128-bit media and scientific
    programming model. This model includes all instructions that
    access the 128-bit XMM registers—called the 128-bit media
    instructions. These instructions perform integer and floatingpoint
    operations primarily on vector operands (a few of the
    instructions take scalar operands). They can speed up certain
    types of procedures—typically high-performance media and
    scientific procedures—by substantial factors, depending on
    data-element size and the regularity and locality of data
    accesses to memory.

    This chapter describes the 128-bit media and scientific
    programming model. This model includes all instructions that
    access the 128-bit XMM registers—called the 128-bit media
    instructions. These instructions perform integer and floatingpoint
    operations primarily on vector operands (a few of the
    instructions take scalar operands). They can speed up certain
    types of procedures—typically high-performance media and
    scientific procedures—by substantial factors, depending on
    data-element size and the regularity and locality of data
    accesses to memory.
    4.1 Overview
    4.1.1 Origins The 128-bit media instruction set includes instructions
    originally introduced as the streaming SIMD extensions (SSE),
    and instructions added in subsequent exensions (SSE2, and
    SSE3). For details on the instruction set origin of each
    instruction, see “Instruction Subsets and CPUID Feature Sets”
    in Volume 3.
    4.1.2 Compatibility The 128-bit media instructions can be executed in any of the
    architecture’s operating modes. Existing SSE, SSE2 and SSE3
    binary programs run in legacy and compatibility modes without
    modification. The support provided by the AMD64 architecture
    for such binaries is identical to that provided by legacy x86
    architectures.
  • oxffff © (21.11.08 10:34) [14]

    > icWasya ©   (21.11.08 10:23) [12]
    >
    > > oxffff ©   (21.11.08 10:18) [10]
    > > Зачем неправду говоришь?
    >
    > А у Вас есть более точная информация об этом ?


    У меня то есть.

    RTFM
    AMD64 Architecture Programmer’s Manual Volume 4: 128-Bit Media Instructions
  • oxffff © (21.11.08 10:41) [15]

    >  В новых версиях Дельфи есть вещественные числа, там скажем
    > 128 битные или может даже ещё большей точности?


    В Delphi 2009 есть поддержка со стороны компилятора встроенного ассемблера

    INTEGRATED COMPILERS
    Enhanced in 2009! High-performance 32-bit optimizing Delphi® native code compiler,
    including High performance x86 Assembler - 32-bit inline assembler supporting the
    Intel® x86 instruction set (including Intel Pentium® Pro, Pentium III, Pentium 4, Intel
    MMX,™ SIMD, Streaming SIMD Extensions, SSE, SSE2, SSE3, SSE 4.1, SSE 4.2, AMD SSE4Aand AMD® 3DNow!®
  • Math (21.11.08 10:44) [16]

    > oxffff ©   (21.11.08 10:41) [15]
    > В Delphi 2009 есть поддержка со стороны компилятора встроенного
    > ассемблера
    >
    > INTEGRATED COMPILERS
    > Enhanced in 2009! High-performance 32-bit optimizing Delphi®
    > native code compiler,
    > including High performance x86 Assembler - 32-bit inline
    > assembler supporting the
    > Intel® x86 instruction set (including Intel Pentium® Pro,
    >  Pentium III, Pentium 4, Intel
    > MMX,™ SIMD, Streaming SIMD Extensions, SSE, SSE2, SSE3,
    > SSE 4.1, SSE 4.2, AMD SSE4Aand AMD® 3DNow!®


    Благодарю! Попытаюсь где-нибудь скачать.
  • oxffff © (21.11.08 10:52) [17]

    > Благодарю! Попытаюсь где-нибудь скачать.


    Учти  это только встроенный ассемблер.
  • oxffff © (21.11.08 10:52) [18]

    > Благодарю! Попытаюсь где-нибудь скачать.


    Учти  это только встроенный ассемблер.
  • MsGuns © (21.11.08 11:47) [19]
    Вряд ли можно рассчитывать на то, что какой-то язык высокого уровня имеет средства для решения ЛЮБОЙ практической задачи. Для этих целей используются либо машкодовые (асм) вставки, если язык позволяет, либо пишутся библиотеки.
  • Anatoly Podgoretsky © (21.11.08 11:48) [20]
    > Math  (21.11.2008 10:19:11)  [11]

    Извиняюсь, был неправ, об этом речь не стояла.
  • тимохов (21.11.08 12:42) [21]
    пользуй Decimal.
    18 знаков до запятой, 10 после.

    его нет в дельфи, но можешь импортировать из oleaut32.dll.
    функции типа VarDecSub и пр. (см. MSDN).

    не скажу, что они медленные, но медленне вещ. чисел, это точно.

    но есть достоинство - это точные типы, можно сравнивать равенством без эпсилона.
  • KSergey © (21.11.08 13:14) [22]
    > Math   (21.11.08 09:32) [6]
    > Нет. Там очень большие с очень малыми складываются.

    Я так и думал.
    Это опять же говорит просто о неправильно организованном алгоритме, не учитывающем то, что выполняться он будет на реальных ЭВМ, а не на теоретических.
    Впрочем, поведение реальных ЭВМ в данном вопросе так же очень подробно описано в учебниках, так что это вполне можно причислить к  теории, которую необходимо подучить.

    Здесь уже предложен вариант - учитывать эти числа раздельно. Или порядок операций поменять, чтобы разномасштабные числа не складывались.
  • KSergey © (21.11.08 13:15) [23]
    > тимохов   (21.11.08 12:42) [21]
    > пользуй Decimal.
    > 18 знаков до запятой, 10 после.

    Не факт, что автору этого хватит, хватит сегодня - не хватит завтра.
    Тут подход менять явно надо.
  • Anatoly Podgoretsky © (21.11.08 13:17) [24]
    > тимохов  (21.11.2008 12:42:21)  [21]

    По крайней мере для БД поддержано и Number(38) - оно же Decimal, по скорости не мерял.
  • icWasya © (21.11.08 13:36) [25]
    128-XMM регистр - это не тоже самое, что 128-разрядное число
  • Anatoly Podgoretsky © (21.11.08 13:44) [26]
    > icWasya  (21.11.2008 13:36:25)  [25]

    Врядли оно поддерживает вещественные.
  • icWasya © (21.11.08 14:29) [27]
    >oxffff ©   (21.11.08 10:34) [14]
    >У меня то есть.
    >RTFM
    >AMD64 Architecture Programmer’s Manual Volume 4: 128-Bit Media Instructions
    Ну и почитай что там написано -

    Операции с двумя упакованными Double
    Операции с четырьмя упакованными Single
    ..
    И нигде нет 128-bit float

    А лучше посмотри Volume 1
    - Figure 4-14. 128-Bit Media Data Types
    на странице 150
  • oxffff © (21.11.08 14:35) [28]

    > icWasya ©   (21.11.08 14:29) [27]


    О радует, что такой внимательный.
    Я уже прочитал.
  • Anatoly Podgoretsky © (21.11.08 15:13) [29]
    > icWasya  (21.11.2008 14:29:27)  [27]

    Что такое упакованые Double и Single
  • Jeer © (21.11.08 15:48) [30]
    "Целые числа созданы богом, все остальное – творение человека" (С) Кронекер
  • Jeer © (21.11.08 15:55) [31]
  • Pavia © (21.11.08 16:53) [32]

    > Что такое упакованые Double и Single

    Упакованные - это когда в один регистр запихнули несколько чисел одного типа.  В 128битном регистре может уместиться 4 числа single или 2 double
  • Юрий Зотов © (21.11.08 17:19) [33]
    > Math   (21.11.08 09:32) [6]

    > очень большие с очень малыми складываются.
    > В результате эта малость теряется, как будто её нет вообще

    Это хорошо известная проблема. Не менее хорошо известно и то, что увеличение разрядности здесь помогает мало, или не помогает вообще. Зато помогает реорганизация вычислений. Вот простейший пример.

    Если написать так:
    Р := Б + м1 + м2 + м3....
    (где Р - результат, Б - большое число, мХ - малые числа),
    то получим Р = Б.

    А если написать так:
    Р := (м1 + м2 + м3.... ) + Б
    то получим Р <> Б.

    Подобных приемов существует немало, и в том числе - перевод задачи в безразмерный вид с таких масштабированием, чтобы этой проблемы избежать совсем.
 
Конференция "Прочее" » Более точные вещественные числа чем Extended?
Есть новые Нет новых   [134446   +31][b:0][p:0.001]