Конференция "Прочее" » Более точные вещественные числа чем Extended?
 
  • 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]