Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.29;
Скачать: CL | DM;

Вниз

Свой тип с плавающей запятой.   Найти похожие ветки 

 
Luarvic   (2011-02-18 08:45) [0]

Мне нужно хранить небольшие не целые числа со знаком.
В хелпе делфи я ненашел того что мне надо, Single ближе остальных, но без знака. И вот я решил сделать свой тип:
1 байт - знак
2 байт - целая часть
3-4 байты - дробная часть
Это ок, или я что-то делаю не так?


 
Inovet ©   (2011-02-18 08:48) [1]

> [0] Luarvic   (18.02.11 08:45)
> Это ок, или я что-то делаю не так?

Это развод?


 
Slym ©   (2011-02-18 08:57) [2]

Luarvic   (18.02.11 8:45)
начни с пайки нового математического процессора под свой тип данных


 
Luarvic   (2011-02-18 09:14) [3]

Ну ладна, я решил использовать Single, но все равно знак придется хранить  отдельно?


 
Inovet ©   (2011-02-18 09:19) [4]

> [3] Luarvic   (18.02.11 09:14)
> но все равно знак придется хранить  отдельно?

С каких пор типы с плавающей точкой стали без знака? Цитату или ссылку в студию.


 
KilkennyCat ©   (2011-02-18 09:23) [5]

конечно. потребуется один байт. знак минус равен 0х2D, плюс равен  0х2B
в будущем, для процессоров с вероятностной логикой, рекомендуется знак ± равный 0хB1, или Ӝ


 
Luarvic   (2011-02-18 09:24) [6]

http://www.delphisources.ru/pages/faq/faq_delphi_basics/Double.php.html


 
KilkennyCat ©   (2011-02-18 09:32) [7]

ну и зачем ты нам ссылку всякой фигни даешь? мы справкой умеем пользоваться.
а уж если и читать что помимо справки, то вот:
http://www.cyberguru.ru/programming/delphi/real-numbers.html


 
Inovet ©   (2011-02-18 09:33) [8]

> [5] KilkennyCat ©   (18.02.11 09:23)
> конечно. потребуется один байт. знак минус равен 0х2D, плюс равен  0х2B

В вероятностной может быть любой символ, но с различной вероятностью, как в квантовой механике и ведь живём и состоим из этого. Так что...

А чё, в DBF так и хранится, про вероятностную логику тогда не догадались.


 
Inovet ©   (2011-02-18 09:35) [9]

> [6] Luarvic   (18.02.11 09:24)
> http://www.delphisources.ru/pages/faq/faq_delphi_basics/Double.php.html

И чё это?
Где цитата из справки, которую ты читал?


 
Sha ©   (2011-02-18 09:49) [10]

> Luarvic   (18.02.11 09:24) [6]

Там еще нуля нет. Не забудь свой нуль реализовать.


 
Luarvic   (2011-02-18 09:50) [11]

Я читал Delphi Language Reference
Type Range Significant digits Size in bytes
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-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^4932 19-20 10
Comp -2^63+1 .. 2^63 -1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20 8


 
Sha ©   (2011-02-18 09:59) [12]

> Luarvic   (18.02.11 09:50) [11]

Наверно, ты разобрался с представлением чисел с плавающей точкой.


 
Inovet ©   (2011-02-18 10:11) [13]

> [11] Luarvic   (18.02.11 09:50)
> Significant digits

Значимые цифры - т.е. точность, а о знаке здесь не упоминается. Короче, знак есть у них, не парься, а лучше погчитай о вещественных типах.


 
RWolf ©   (2011-02-18 11:07) [14]


> Luarvic   (18.02.11 08:45) 
> Мне нужно хранить небольшие не целые числа со знаком.

Предположу, что вполне достаточно хранить их домноженными на тысячу (для трех цифр после запятой) и в виде Integer.


 
xmen   (2011-02-18 11:25) [15]


> Luarvic   (18.02.11 08:45) 
> Мне нужно хранить небольшие не целые числа со знаком.


я что-то не понял, чем не устраивают имеющиеся типы?

задача того стоит? как вообще беруться за выполнение того о чем толком предствления не имеют, я обычно перед тем как дать ответ продумываю, а реально ли вообще с моими знаниями реализовать задачу.

если цель именно сделать что-то своё, то нужно начинать с изучения теоретического материала, а если нужно просто использовать некоторую функциональность, чтобы реализовать задачу, то лучше найти готовую библиотеку

http://alenacpp.blogspot.com/2007/03/blog-post_21.html


> В хелпе делфи я ненашел того что мне надо, Single ближе
> остальных, но без знака. И вот я решил сделать свой тип:
> 1 байт - знак2 байт - целая часть3-4 байты - дробная частьЭто
> ок, или я что-то делаю не так?


Реализуй свой тип так, чтобы потом мог с ним выполнять операции, числа ведь предполают, что с ними будут выполнять некоторые операции, а иначе у тебя получится просто хранилище, которое в общем случае можно сделать как string - быстро и красиво :-)


 
Luarvic   (2011-02-18 13:52) [16]

буду юзать Single


 
KilkennyCat ©   (2011-02-18 13:57) [17]

если будещь операции над ними еще проводить, прочитай статью Антона Григорьева, ссылку на которую я приводил в [7] главцу 6. "Примеры «неправильного» поведения вещественных типов"


 
han_malign   (2011-02-18 14:55) [18]


> Предположу, что вполне достаточно хранить их домноженными
> на тысячу (для трех цифр после запятой) и в виде Integer.

- не совсем - нужна коррекция для мультипликативных операций:
type TFixed1000 = type LongInt;
mul(x1,x2: TFixed1000) = TFixed1000(int64(x1*x2) div 1000);
div(x1,x2: TFixed1000) = TFixed1000(int64(1000*x1) div x2);

и, тогда уж, для фиксированной точки логичней выбрать базу 65536...

Домашнее задание: Объяснить смысл приведения к int64.
Заодно понять - в чем еще подвох фиксированной точки без поддержки процессором, какую проверку надо добавить и какое исключение возбудить...


 
KSergey ©   (2011-02-18 15:52) [19]

> Luarvic   (18.02.11 13:52) [16]
> буду юзать Single

Чем все же Double не устраивает?


 
sniknik ©   (2011-02-18 16:01) [20]

> Чем все же Double не устраивает?
почему сразу не Extended ? все одно все вычисления делаются в нем, а после приводятся к типу, а так не будет лишних преобразований.


 
KSergey ©   (2011-02-18 16:05) [21]

> sniknik ©   (18.02.11 16:01) [20]
> почему сразу не Extended ?

Привычка :)


 
Luarvic   (2011-02-19 04:00) [22]

http://www.delphisources.ru/pages/faq/faq_delphi_basics/Single.php.html написано что сингл быстрее, к тому же мне плевать на скорость вычислений, мне нужно передавать эти данные по сети


 
KilkennyCat ©   (2011-02-19 09:05) [23]

ну если сеть через COM-порт сделана, то тогда да, это понятно.


 
KSergey ©   (2011-02-19 12:07) [24]

> Luarvic   (19.02.11 04:00) [22]

А Single сопроцессором напрямую поддерживается? если нет - тогда см. sniknik ©   (18.02.11 16:01) [20] и на том сайте врут.


 
Amoeba_   (2011-02-19 22:12) [25]


> Luarvic   (19.02.11 04:00) [22]
>
> http://www.delphisources.ru/pages/faq/faq_delphi_basics/Single.
> php.html написано что сингл быстрее

Читать: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
Цитата оттуда:
... типы Single, Double и Extended. Extended – это родной для сопроцессора тип, а типы Single и Double получаются из него очень простым усечением. При загрузке числа типа Single или Double во внутренний регистр сопроцессора последний конвертирует их в Extended. Напротив, при выгрузке чисел этих типов из регистра в память сопроцессор усекает их до нужного размера.

P.S. Делаем вывод.


 
KilkennyCat ©   (2011-02-19 22:51) [26]


> P.S. Делаем вывод.

Вывод - быстрее. он при выгрузке из регистра не все выгружает, за счет чего усечение и происходит, а выгрузка становится быстрее.
:)


 
sniknik ©   (2011-02-20 00:48) [27]

> он при выгрузке из регистра не все выгружает, за счет чего усечение и происходит, а выгрузка становится быстрее.
т.е. по твоей логике если выгружать бит (ну вот не нужно больше) то будет максимально быстро...  чего же тогда булеан = байту, а после, в OLE стали и 2х байтные булеаны использовать? могли бы максимально быстрый битовый способ оставить...

p.s. не верный вывод. меньше не всегда быстрее.


 
clickmaker ©   (2011-02-20 01:00) [28]

> в OLE стали и 2х байтные булеаны использовать?

это на случай войны


 
KilkennyCat ©   (2011-02-20 01:02) [29]


> т.е. по твоей логике если выгружать бит (ну вот не нужно
> больше) то будет максимально быстро...

ну, если следовать этой логике, то да. надо только адресацию перепаять.


 
Германн ©   (2011-02-20 02:07) [30]


> sniknik ©   (20.02.11 00:48) [27]
>
> > он при выгрузке из регистра не все выгружает, за счет
> чего усечение и происходит, а выгрузка становится быстрее.
>
> т.е. по твоей логике

Там же смайлик стоит, Коля!


 
Anatoly Podgoretsky ©   (2011-02-20 10:41) [31]

> clickmaker  (20.02.2011 01:00:28)  [28]

На случай войны они четырех байтовые оставили.


 
sniknik ©   (2011-02-20 11:20) [32]

нет, на случай войны они уже ввели третье значение в базах для логического типа - null, готовятся... вот добавят еще одно - "может быть, если очень надо" или (то же самое) "да, в военное время", и будут полностью готовы.

а вообще, если без шуток, как понимаю сделали 2 байта чтобы не морочиться оптимизацией, сдвигом переменных на четные адреса, из-за "паршивой, ломающей четность, однобайтной, овцы".
т.е. ускорение за счет увеличения размера... забавно. а автор ради этого же пытается что-то уменьшить... вообразил себя умнее мелкософта.
это к тому, имхо, что любые потуги ускорения, без знаний, приведут скорее всего к тормозам... а получив знания начинаешь осознавать - а не так все плохо в системе, как мнилось поначалу... не спроста сделали так, а не иначе, не так как тебе казалось правильным в "юном лемерском возрасте".

кстати и сеть тоже работает скорее всего не так как он себе это представляет. т.е. если у него передается ряд чисел, в несколько мегабайт (к примеру), и смена типа уменьшает размер в 2 раза, то да это ускорит передачу, но если эта борьба из-за нескольких байт/десятков байт в пакете...  то вряд ли, т.к. оно там имеет какой-то минимальный передаваемый размер (типа кластера на диске=4кб, даже если в него записан 1 байт), т.е. борьба за биты внутри этого "кластера" ни к чему не приведет, кроме усложнения алгоритма/лишних преобразований/неудобства работы со структурой (то что на выходе поток байт ничего не значит, в основе TCP/IP обмен датаграммами (пакетами), это уже после вам предоставляется поток)/возможности ошибок.
+ к первому случаю, несколько мегабайт чаще выгоднее архивировать/разархивировать, а не подгонять типы под минимальную предполагаемую вместимость значений (даже при архивации в обоих случаях... "рыхлые" данные могут дать в результате меньший обьем).


 
KilkennyCat ©   (2011-02-20 12:37) [33]


> сдвигом переменных на четные адреса

я вот сейчас техасинструментовский контроллер мучаю, так там
четная адресация только.



Страницы: 1 вся ветка

Текущий архив: 2011.05.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.012 c
15-1297716299
Mark
2011-02-14 23:44
2011.05.29
Слонение топонимов для украинского языка


9-1189349370
Dib@zol
2007-09-09 18:49
2011.05.29
Проблема с текстурами


2-1297941333
candide
2011-02-17 14:15
2011.05.29
Печать таблицы StringList


6-1237532294
CaptainAlex
2009-03-20 09:58
2011.05.29
Indy + SSL = не могу залогиниться


15-1297546203
Юрий
2011-02-13 00:30
2011.05.29
С днем рождения ! 13 февраля 2011 воскресенье