powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Какой тип выбрать : numeric vs float
25 сообщений из 35, страница 1 из 2
Какой тип выбрать : numeric vs float
    #35431292
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня

Я использую Sybase ASE 12.5.3. Стоит вопрос выбора типа для хранения данных. Аналогичный вопрос я задавал на форуме "Проектирование БД" (http://sql.ru/forum/actualthread.aspx?tid=573046). Вопросы, которые я хочу здесь задать, специфичные для ASE:

1. Прокомментируйте, пож, выдержку ниже. Не очень понятно, что за такая 'performance penalty'. К сожалению, могу привести только этот кусок текста, так как получил его по почте.

авторAs of version 2.04, the Sybase DATETIME and MONEY datatypes can be kept in their native formats in both the Sybase::DBlib and Sybase::CTlib modules. In addition, NUMERIC or DECIMAL values can also be kept in their native formats when using the Sybase::CTlib module. This behavior is normally turned off by default, because there is a performance penalty associated with it . It is turned on by using package or database handle specific attributes.


2. Дайте пож ссылку на информацию о неявных преобразованиях типов в ASE. Интересует вопрос, касающийся преобразования числовых констант в операциях сравнения (инструкция where). К примеру, в какой тип будет преобразована константа 10.3, если столбец 'value' имеет тип numeric(5,3):

авторselect value from table where value < 10.3


С уважением,
Давыдов Виталий
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35431336
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff wrote:

> Я использую Sybase ASE 12.5.3. Стоит вопрос выбора типа для хранения
> данных.

А какие данные нужно хранить?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35431353
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Проценты с 2 или 3-мя знаками после запятой: 10.03, 65.01
2. Числа типа numeric(13,2). Пример - 12345678.23
3, Также нужно хранить 3-х значные целые числа. Пример: 123, 456
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35431571
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> 1. Прокомментируйте, пож, выдержку ниже. Не очень понятно, что за такая
> 'performance penalty'. К сожалению, могу привести только этот кусок
> текста, так как получил его по почте.
>
> автор
> As of version 2.04, the Sybase DATETIME and MONEY datatypes can be kept
> in their native formats in both the Sybase::DBlib and Sybase::CTlib
> modules. In addition, NUMERIC or DECIMAL values can also be kept in
> their native formats when using the Sybase::CTlib module. This behavior
> is normally turned off by default, *because there is a performance
> penalty associated with it*. It is turned on by using package or
> database handle specific attributes.

Комментирую: это ерунда.
Тут видимо обсуждаются пакеты для Perl-а.
Там (как и в любом другом клиенте, использующем CTLib)
данные могут быть представлены в виде строк или в виде
значений типов DATETIME, MONEY, NUMERIC or DECIMAL.
Эти типы не встроены в язык Perl, а являются структурами,
поддерживаемыми библиотекой CTLib common client and server library.
Поэтому при обращении к операциям этих типов будут вызываться
функции этой библиотеки и это потенциально может быть медленнее,
чем если бы это была перловая строка, которая встроена в язык
и вроде бы должна работать быстрее. Видимо, поэтому в Sybase::CTlib
есть два режима работы, когда клиентские переменные используются
как строки Perl, либо как native- значения (не все, поскольку
типы типа String, int и т.п. будут использовать встроенные типы
данных Perl).

Почему это все ерунда - потому что у пользователя нет выбора,
думаю. Если ему НЕ НУЖНЫ операции с полями данных типа numeric
и прочими, то можно использовать строковые представления.
Если операции с этими типами данных нужны на клиенте,
то делать нечего, придется использовать CTLib.

На самом деле язык Perl такой медленный сам по себе, что его уже
ничто не спасёт (это наполовину шутка).

> 2. Дайте пож ссылку на информацию о неявных преобразованиях типов в ASE.
> Интересует вопрос, касающийся преобразования числовых констант в
> операциях сравнения (инструкция where). К примеру, в какой тип будет
> преобразована константа 10.3, если столбец 'value' имеет тип numeric(5,3):
>
> автор
> select value from table where value < 10.3

Здесь 10.3 имеет тип numeric

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 10.3
go

result set #1.
Field 1: 		Type : numeric(3,1) (CS_NUMERIC_TYPE).

     |
----|
10.3|

  1 row(s).


Немногие знают, что в ASE (в Transact SQL) есть КОНСТАНТЫ типа numeric.
А сделано так потому, чтобы до тех пор, пока константа не присвоилась
какой-то переменной, не терялась бы ее точность.
Также есть константы типа MONEY

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select $10.3
go

result set #1.
Field 1: 		Type : numeric(3,1) (CS_NUMERIC_TYPE).

     |
----|
10.3|

  1 row(s).


и константы типа double float


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select 10.3e1, 10.3e0, 10.3f
go

result set #1.
Field 1: 		Type : float (CS_FLOAT_TYPE).
Field 2: 		Type : float (CS_FLOAT_TYPE).
Field 3: f		Type : numeric(3,1) (CS_NUMERIC_TYPE).

      |                  |f   |
-----|------------------|----|
103.0|10.300000000000001|10.3|

  1 row(s).


Заметьте, что последнее поле имеет тип NUMERIC, а 'f' в конце ошибочно
итретпретируется как название выводимого поля. Видимо, это баг в парсере
TSQL, хотя и безобидный.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35431673
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv - большое спасибо за ответ! Действительно, числовые константы наподобие тех, что я привел в одном из постов, имеют тип numeric.

Что касается CTlib, вроде бы есть также C++ - версия. Ни разу не использовал эту библиотеку, так что мне не очень понятно, что означает native format в C++. Особое представление, к примеру, структура с двумя полями - целая и дробная часть...? В любом случае, проигрыш в производительности при конвертации в C++ - пренебрежимо мал в сравнении со всем остальным, IMHO.
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35431974
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> Что касается CTlib, вроде бы есть также C++ - версия.

Так только и есть С-версия, другой нету.
Только С, а не С++. С++ - нету.

Ни разу не
> использовал эту библиотеку, так что мне не очень понятно, что означает
> native format в C++.

Типы данных в том представлении, в котором они храняться в том
числе в самом ASE.

Особое представление, к примеру, структура с двумя
> полями - целая и дробная часть...?

Ну, там сложнее немного все, NUMERIC представляется как
число, хранимое в 256-ричной системе счисления, но это не важно.

В любом случае, проигрыш в
> производительности при конвертации в C++ - пренебрежимо мал в сравнении
> со всем остальным, IMHO.

Да, именно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35433462
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за уточнение. Добавлю, что также существуют реализации на perl и, вроде бы, ruby. Возможно, что можно найти реализации под другие языки программирования.
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35434398
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> Спасибо за уточнение. Добавлю, что также существуют реализации на perl
> и, вроде бы, ruby. Возможно, что можно найти реализации под другие языки
> программирования.

Это не реализации всё. Это - так называемые линки. Модули языка, которые
осуществляют вызовы native C кода. А сама реализация - на C, в виде
разделяемой библиотеки.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35439830
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Играюсь сейчас с CT-lib API (на языке C). Тип БД float (8 байт) преобразуется на клиенте в C-тип double, но в случае с numeric используется C-структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
typedef struct _cs_numeric
{
     CS_BYTE  precision;
     CS_BYTE  scale;
     CS_BYTE  array CS_MAX_NAMELEN;
} CS_NUMERIC;

Пока не очень понятно, как преобразовывать эту структуру. Пытаюсь разобраться с функцией cs_convert. В целом, API содержит минимальный набор функций. С одной стороны это хорошо, но с другой стороны доставляет определенные сложности в разработке. Интересно, есть другие , более простые способы выполнить преобразование без использования ф-и cs_convert? Буду рад, если кто-нибудь приведет простой пример кода преобразования с помощью этой функции.
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35439872
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается, что sizeof(CS_NUMERIC) = 35. Неужели сервер пересылает на клиент numeric числа, используя 35 байт?
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440115
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> Оказывается, что sizeof(CS_NUMERIC) = 35. Неужели сервер пересылает на
> клиент numeric числа, используя 35 байт?

Да. Не, конечно самое фиговое - что оно там фиксированной длины, но
не все 256-ричные цифры всегда используются.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440138
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Это серьезный аргумент в сторону использования float!
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440143
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> Пока не очень понятно, как преобразовывать эту структуру. Пытаюсь
> разобраться с функцией cs_convert.

Вот именно, cs_convert-ом.

В целом, API содержит минимальный
> набор функций. С одной стороны это хорошо, но с другой стороны
> доставляет определенные сложности в разработке. Интересно, есть другие ,
> более простые способы выполнить преобразование без использования ф-и
> cs_convert?

Нет, нету. В смысле, в API. Если сам напишешь, то будет.

Буду рад, если кто-нибудь приведет простой пример кода
> преобразования с помощью этой функции.

На счёт "простой" - это ты погорячился, там такого не бывает, ну вот
"обычный" можно найти.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
void PrintColumn( CS_CONTEXT* ctx, const int nCol, const CS_DATAFMT &FieldDescr, 
const void* pBufP, const CS_INT *pDataLength, const CS_SMALLINT *pIndicator )
{
   if( *pIndicator == NULL_INDICATOR )
   {
     cout << _T("<NULL>") << " |\t";
     return;
   }

   switch ( FieldDescr.datatype )
   {
   // ...
   case CS_DECIMAL_TYPE:
   case CS_NUMERIC_TYPE:
     {
       const CS_NUMERIC *pBCD = reinterpret_cast< const CS_NUMERIC* >( pBufP );

       CS_DATAFMT dstFormat;
       dstFormat.datatype = CS_CHAR_TYPE;
       dstFormat.maxlength =  512 ;
       dstFormat.locale = NULL;
       dstFormat.format = CS_FMT_NULLTERM;
       dstFormat.precision = CS_SRC_VALUE;
       dstFormat.scale = CS_SRC_VALUE;
       unsigned char buf[ 512 ];
       CS_INT resultlen =  0 ;

       ::cs_convert( ctx, const_cast<CS_DATAFMT*>(&FieldDescr), 
const_cast<CS_NUMERIC*>(pBCD), &dstFormat, &buf, &resultlen);

       cout << buf;
       /*
       // Знак храниться в виде IsNegative в первом байте.
       if( pBCD->array[0] )
         cout << '-';

       unsigned short NumBytes = (pBCD->precision >> 1) + (pBCD->precision & 0x01);
       bool bFirstSignificantDigitMet = false;
       {for( int i = 1; i <= NumBytes; i++ )
       {
         unsigned char Digits = pBCD->array[ i ];

         bFirstSignificantDigitMet |= ( Digits / 10 > 0 );
         //if( bFirstSignificantDigitMet || Digits / 10 )
           cout << (Digits / 10);
         //else
         //  cout << ' ';

         if( (i << 1) - 1 == pBCD->precision - pBCD->scale )
           cout << '.';

         //bFirstSignificantDigitMet |= ( Digits % 10 > 0 );
         cout << (Digits % 10);

         if( (i << 1) == pBCD->precision - pBCD->scale )
           cout << '.';
       }}

       {for( int i = 0; i < pBCD->precision; i++ )
       {
         unsigned char Digit = 0;

         if( i & 0x01 )
           Digit = pBCD->array[ (i>>1) + 1 ] & 0xF0;
         else
           Digit = pBCD->array[ (i>>1) + 1 ] & 0x0F;

         Digit += '0';

         cout << Digit;

         if( i == pBCD->precision - pBCD->scale - 1 )
           cout << '.';
       }}
       */
     }
     break;

   default:
     break;
   }

   cout << " |\t";
}



В комментарии там попытка перевести в строку самому.
Неудачная.
Я думал, там BCD, но там не оно, а 256-ричное число.
Его бы и можно было бы переверсти самому, но
там загвоздка в том, где они помещают десятичную точку,
это сложно вычислить. Если бы это знать, то всё было бы ОК.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440223
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv - большое спасибо за пример. Еще раз убедился, что двигаюсь в правильном направлении. Я пытаюсь сконвертировать double в CS_NUMERIC, но функция cs_convert выдает ошибку. Пока еще не разобрался, в чем дело. Контекст создал и инициализировал. Соединение с БД с созданным контекстом происходит. Команды выполняются, а cs_convert выдает ошибку ( retcode = 0).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    double val( 100 . 2345 );
    CS_NUMERIC num;
    CS_INT len( 10 );

    CS_DATAFMT srcfmt;
    srcfmt.datatype = CS_FLOAT_TYPE;

    CS_DATAFMT tgtfmt;
    tgtfmt.datatype = CS_NUMERIC_TYPE;
    tgtfmt.precision =  10 ;
    tgtfmt.scale =  5 ;

    CS_RETCODE ret = cs_convert(ctx, &srcfmt, &val, &tgtfmt, &num, &len);
    if (ret != CS_SUCCEED) {
        printf("RET CODE: %d\n", ret);
        EXIT_ON_FAIL("cs_convert is failed");
    }
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440230
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнулил структуры перед использованием:

Код: plaintext
1.
2.
3.
4.
...
CS_DATAFMT srcfmt;
memset(&srcfmt,  0 , sizeof(CS_DATAFMT));
...

Похоже, сработало. cs_convert завершилась без ошибок.
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440697
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:
> Мда. Это серьезный аргумент в сторону использования float!

Нет, уж извини. Нужна тебе точная арифметика - используй NUMERIC.
Это не техническими требованиями определяется, а функциональными.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35440710
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> MasterZiv - большое спасибо за пример. Еще раз убедился, что двигаюсь в
> правильном направлении. Я пытаюсь сконвертировать double в CS_NUMERIC,
> но функция cs_convert выдает ошибку.

Да боюсь, что в неправильном. Double бессмысленно конвертировать в NUMERIC.
Потому что DOUBLE - неточный тип данных, а NUMERIC -точный.
Я уже не помню, возможно ли вообще такое преобразование в CTLib, если
что - можно посмотреть в документации или вызвать функцию cs_canconvert()
(или cs_will_convert() ?), но если нельзя, то надо это делать через
строку:

[fix]
DOUBLE => STRING => обрезать до нужного кол-ва знаков => NUMERIC
[/fix]

> Контекст создал и инициализировал. Соединение с БД с созданным
> контекстом происходит.

Вот же блин, как тебе плохо-то!
Надо бы тебе выслать пример.
Хотя кстати примеры есть в стандартной поставке.
Ну я могу тоже дать (другой).
Но в понедельник.

Для cs_convert соединение вовсе не обязательно устанавливать,
и без соединения должно работать.

Команды выполняются, а cs_convert выдает ошибку (
> retcode = 0).

>
> double val(100.2345);
> CS_NUMERIC num;
> CS_INT len(10);
>
> CS_DATAFMT srcfmt;
> srcfmt.datatype = CS_FLOAT_TYPE;
>
> CS_DATAFMT tgtfmt;
> tgtfmt.datatype = CS_NUMERIC_TYPE;
> tgtfmt.precision = 10;
> tgtfmt.scale = 5;
>
> CS_RETCODE ret = cs_convert(ctx, &srcfmt, &val, &tgtfmt, &num, &len);
> if (ret != CS_SUCCEED) {
> printf("RET CODE: %d\n", ret);
> EXIT_ON_FAIL("cs_convert is failed");
> }

Да, наивный код. Работать кажется не будет.
Ладно, до понедельника.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442543
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Комментарии интересные, но я не пока не могу согласиться с невозможностью сконвертировать double в numeric. Почитал "Open Client and Open Server Common Libraries Reference Manual" (v. 12.5). Там, в описании ф-и convert, есть таблица "Datatype conversion chart", на основании которой можно сделать вывод о возможности конвертации одного типа, в другой. Конвертация CS_FLOAT в CS_NUMERIC допускается. Обратно - также допускается. Добавлю, что код работает, если добавить "обнуление" структуры (memset). Также не могу согласиться с утверждением о бессмысленности конвертации double в numeric. Бессмысленно - если не установлены правила конвертации. Единственно, что пока непонятно - мой код не работает, если не "обнулить" структуру CS_DATAFMT.

Еще раз большое спасибо за полезные комментарии, MasterZiv.
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442755
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv прав. Конвертация из неточного представления числа типа FLOAT/DOUBLE в точный NUMERIC/DECIMAL - нецелесообразна. Даже никакие правила не помогут.


Касательно обязательного обнуления струкутры CS_DATAFMT, то во всех примерах указано что структуру после инициализации надо обнулять. Также посмотрел свой код, по конверсии на основе OpenClient, там тоже всегда я ее обнулял после инициализации
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442823
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, соглашусь, что на стороне клиента нецелесообразно преобразовывать float в numeric, так как клиент (на C++ например) не умеет напрямую работать с numeric в отличие от CS_FLOAT, который автоматически представляется в программе как double. На самом деле, целью моего примера было протестировать обратное преобразование из numeric в float, так как клиент работает в числами double. Если хранить числа в БД в виде numeric, то в клиенте их надо будет преобразовывать в double. Я замерил производительность этого преобразования: 1 сек - 1М преобразований на AMD Opteron 250, CPU 2400MGz. Я считаю, что это не быстрое преобразование, но вклад в общую производительность вряд ли будет существенным.
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442842
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

Бессмысленно - если не
> установлены правила конвертации.

Бессмысленно, на мой взгляд, вообще, по идеологическим
соображениям. Вот НИ РАЗУ В ЖИЗНИ мне это ещё не понадобилось.
Потому что если данные точные - они точные, а если приблизительные
- то приблизительные. Их не зачем скрещивать. Они нигде не пересекаются.

Не можете более детально описать, зачем вам это надо ?

Единственно, что пока непонятно - мой
> код не работает, если не "обнулить" структуру CS_DATAFMT.

Ну потому что надо обнулять.
Так написано в документации.

Пример вам нужен еще ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442892
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv - Я уже согласился, что на стороне клиента преобразовывать тип double в numeric бессмысленно. Что касается обратного преобразования, то смысл есть. Опишу задачу, которая состоит в разработке схемы БД для хранения данных, поступающих извне. Эти данные поставляются с фиксированной точностью. Точность предоставления данных регламентирована и вряд ли будет меняться. Вторая задача - использование этой БД в клиенте. Клиент - аналитическое приложение, которые строит разные модели на основе данных в БД. Алгоритмы расчета используют тип double. Стоит добавить, что этот клиент - не единственный. Возможны другие способы использования этой БД. Моя идея хранить данные в БД в виде numeric и выполнять преобразования на стороне клиента из numeric в double.

Примеру буду очень рад. Вышлите мне, пожалуйста, на мой адрес, указанный в профайле (он открыт сейчас).

Еще раз спасибо и удачного трудового дня!
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442962
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

> так как клиент работает в числами double. Если хранить числа в БД в виде
> numeric, то в клиенте их надо будет преобразовывать в double. Я замерил

Да нет же, НЕТ !
НЕЛЬЗЯ ТАКОГО ДЕЛАТЬ НИКОГДА !

numeric -точный тип данных. Float, fdouble - приблизительные.
Если вы будете между ними преобразовывать, у вас будут нарушения доменной
целостности, и

> производительность этого преобразования: 1 сек - 1М преобразований на
> AMD Opteron 250, CPU 2400MGz. Я считаю, что это не быстрое
> преобразование, но вклад в общую производительность вряд ли будет
> существенным.

Вы, еще раз говорю, не тем занимаетесь. Если у вас есть требование
использовать точную арифметику, то это - функциональное требование.
А не техническое. Если оно у вас есть, то вам ВЕЗДЕ НУЖНО ИСПОЛЬЗОВАТЬ
ИМЕННО NUMERIC-и (ну или аналоги, money, decimal).
У вас НЕТ ВЫБОРА. Потому что float-ы - неточные,
и точность вашу нарушат. Причем это произойдет, если ХОТЯ БЫ ГДЕ-ТО,
либо в БД, либо в клиенте, либо по дороге от первой ко второму или обратно,
вы ХОТЯ БЫ ОДИН РАЗ используете неточную арифметику ДАЖЕ ДЛЯ ХРАНЕНИЯ
данных, а не только для вычислений.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442973
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:

Опишу задачу, которая состоит в разработке схемы БД для
> хранения данных, поступающих извне.

Вот это - хорошо бы, потому что не понятно, чем вы там страдаете.
отчего сыр-бор.

Эти данные поставляются с
> фиксированной точностью. Точность предоставления данных регламентирована
> и вряд ли будет меняться. Вторая задача - использование этой БД в
> клиенте. Клиент - аналитическое приложение, которые строит разные модели
> на основе данных в БД. Алгоритмы расчета используют тип double. Стоит
> добавить, что этот клиент - не единственный. Возможны другие способы
> использования этой БД. Моя идея хранить данные в БД в виде numeric и
> выполнять преобразования на стороне клиента из numeric в double.

Ну, так это еще имеет смысл, может быть. Только тогда не понятно, зачем
данные уже в БД хранить в точной арифметике. Ну разве что для других
возможных приложений.

вы про сами данные-то расскажите, что там хранится-то у вас.
Сами данные-то какие ? Хотя бы пример поля типичного,
и что оно из себя представляет.

> Примеру буду очень рад. Вышлите мне, пожалуйста, на мой адрес, указанный
> в профайле (он открыт сейчас).

да

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Какой тип выбрать : numeric vs float
    #35442995
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример "правильного" приложения, работающего с сервером через CTLib Open Client с использованием получения данных в native-форме, т.е. в такой, как данные хранятся в БД. (альтернативой было бы получение данных в текстовом виде).
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Какой тип выбрать : numeric vs float
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]