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

Вниз

Внутреннее представление формата Extended   Найти похожие ветки 

 
wasabi   (2004-07-01 17:09) [0]

Кто-нибудь знает описание субж.?

Благодарю за внимание,
Василий


 
begin...end ©   (2004-07-01 17:14) [1]

http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374 ?


 
Iconka ©   (2004-07-01 17:15) [2]

Трудно посмотреть в хелпе???

Extended 3.6 x 10^–4951 .. 1.1 x 10^4932 Size of byte-10


 
Iconka ©   (2004-07-01 17:24) [3]

To begin...end

Информация интересная...


 
begin...end ©   (2004-07-01 17:29) [4]


> [3] Iconka ©   (01.07.04 17:24)


Да, я несколько лет назад (когда молодой ещё был :) всё никак не мог понять, почему не завершается такой цикл:

var
 I: Real;

begin
 I := 0;
 repeat
   I := I + 0.1
 until I = 0.3;
end;

Тогда эта статья мне здорово помогла. Ну и, конечно, сайт мастаков :)


 
Igorek ©   (2004-07-01 17:51) [5]


> begin...end ©   (01.07.04 17:29) [4]

Что бы там не писали в статье, цикл должен завершаться. Т.е. число должно представляться точно. А оно, зараза после первого добавления на самом деле хранит 0.100000000000006. Ну и потом по ходу идут неточности то в большую то в меньшую сторону.

---
Статью распечатал - обязательно прочитаю.


 
Amoeba ©   (2004-07-01 17:53) [6]


> Что бы там не писали в статье, цикл должен завершаться.
> Т.е. число должно представляться точно.

Чушь!


 
begin...end ©   (2004-07-01 18:00) [7]

Там фишка в том, что не каждое десятичное число может быть абсолютно точно представлено в виде двоичного.

Например, следующий цикл завершится без проблем:

var
 I: Real;
begin
 I := 0;
 repeat
   I := I + 0.5
 until I = 10;
end.


 
Юрий Зотов ©   (2004-07-01 18:09) [8]

> Igorek ©   (01.07.04 17:51) [5]

> Что бы там не писали в статье, цикл должен завершаться. Т.е.
> число должно представляться точно.

> Статью распечатал - обязательно прочитаю.

Не логичнее было бы поступить наоборот - СНАЧАЛА прочитать и понять, а уж ПОТОМ говорить о том, что должно и чего не должно быть?


 
Igorek ©   (2004-07-01 19:11) [9]


> Юрий Зотов ©   (01.07.04 18:09) [8]
> Не логичнее было бы поступить наоборот - СНАЧАЛА прочитать
> и понять, а уж ПОТОМ говорить о том, что должно и чего не
> должно быть?

У каждого своя логика. :-)))
Мне напр. и без статьи непонятно, почему проблемы перевода/представления из двоичной системы в десятеричную должны вылазить в такие проблемы для юзера. Взялись реализовывать десятичное число с плавающей точкой - будьте любезны релизовать так, что-бы не было ошибок округления в таких элементарных примерах.

Впрочем я могу ошибаться. И если Вас устроит, то в скором времени прочитаю и постараюсь понять статью. Потом выскажу свое мнение. Но сомневаюсь что оно изменится. $-)


 
Тимохов ©   (2004-07-01 19:12) [10]


> Igorek ©   (01.07.04 19:11) [9]

помолчите
вам сейчас lmd пришьют
(правильно сделают, замечу)


 
begin...end ©   (2004-07-01 19:13) [11]

Понеслось...


 
Тимохов ©   (2004-07-01 19:13) [12]


> проблемы для юзера

если вы юзер - что вы тут делаете.
это форум программистов :)))


 
Anatoly Podgoretsky ©   (2004-07-01 19:17) [13]

Igorek ©   (01.07.04 19:11) [9]
Ты про неправильные дроби что ни буд слышал, это не программирование, а метематика.

1/3 * 3 никогда не будет равно 1
А вот
1   3
- * -
3   1
будет, а здесь тоже самое выражение, только дробь не десятичная.


 
default ©   (2004-07-01 19:20) [14]

Igorek ©   (01.07.04 19:11) [9]
попробуйте перевести десят-ое число 0.7 в двоичное(
и придёте к бесконечной рациональной двоичной дроби


 
Тимохов ©   (2004-07-01 19:21) [15]

эх, жать орешник не обновляется.


 
Igorek ©   (2004-07-01 20:39) [16]

[10-12, 15] - ignored

Представим тип SimpleReal для представления числа от 0 до 1. Машинное представление - два бита. Понятно, что два бита дадут возможность представить только 4 разных числа.
Пусть преобразование из десятичной дроби в двоичную происходит так:
[0-0.25) - 00
[0.25-0.5) - 01
[0.5-0.75) - 10
[0.75-1) - 11

Теперь пусть такой код:
var
 sr: SimpleReal;
begin
 sr := 0.3;

В памяти оно сохранит как 01.
Теперь прочитаем значение sr:
var
 r: Real;
begin
 r := sr;

r должно принять какое-то значение в диапазоне [0.25-0.5)
Пусть это будет 0.25 (допустим мы сами реализовали SimpleReal).
Имеем потерю точности вследствие:
1) невозможности представить некоторое десятичное число в двоичной форме без потери точности
2) округления при преобразовании назад в десятичное число

Вы наверно такую вещь имели ввиду, когда писали [10-15]?


 
Глеб ©   (2004-07-02 02:42) [17]


> эх, жать орешник не обновляется.


 
Igorek ©   (2004-07-02 10:16) [18]

Прочитал статью. В своем мнении только утвердился. Впрочем сомневаюсь, что здесь оно будет кому-то интересно. Здесь в моде "LMD", "в орешник" и другие недалекие выражения. Ламерством за версту тхнет.


 
Iconka ©   (2004-07-02 10:19) [19]

Что такое LMD?


 
hexone   (2004-07-02 10:23) [20]


> Что такое LMD?

Компоненты такие


 
Iconka ©   (2004-07-02 10:24) [21]

Знаю. А в контексте "вам сейчас lmd пришьют"?


 
Тимохов ©   (2004-07-02 10:24) [22]


> Igorek ©   (02.07.04 10:16) [18]

если вам нужен точный, тип, где можно сравнивать равенством, то пользуйтесь например типом TDecimal. Данный тип имеет всего 28 знаков и 10 (точных) знаков после запятой. Этот тип не описан в дельфи - в модуле activex описан только прототип - запись схожая с tvardata.

Операции также не работают в дельфи - их надо импортировать из библиотеки oleaut32.dll, например так
function VarDecAdd(var aDec1: TDecimal; var aDec2: TDecimal;
  out aDecResult: TDecimal): HResult;
  stdcall; external "oleaut32.dll" name "VarDecAdd";

Теоретически можете создать complex вариант - и туда его запихать, т.е. пользоваться +, - и т.д., а не функциями. Я уже 3 гда функциями пользуюсь - не грущу.

ЗЫ.
А про extended - чессо слово помолчали бы.


 
Тимохов ©   (2004-07-02 10:27) [23]


> Iconka ©   (02.07.04 10:24) [21]

когда говороришь ерунду и еще упорствуешь в ереси - короме как ламер сказать что-нить сложно.


> Igorek ©   (01.07.04 20:39) [16]

А еще, коллега, вы врун, т.к. статью не читали.
:)))


 
Sandman25 ©   (2004-07-02 10:31) [24]

[23] Тимохов ©   (02.07.04 10:27)

Точнее, либо врун (если не читал), либо дурак (если читал).


 
Anatoly Podgoretsky ©   (2004-07-02 10:33) [25]

Iconka ©   (02.07.04 10:24) [21]
Это щначит, что кто ни будь вышлет ему компоненты LMD, раз просит.


 
Igorek ©   (2004-07-02 12:47) [26]

Удалено модератором


 
Sandman25 ©   (2004-07-02 12:50) [27]

[26] Igorek ©   (02.07.04 12:47)

Вы свое мнение уже высказали :) вот тут [18] Igorek ©   (02.07.04 10:16)
"Прочитал статью. В своем мнении только утвердился"


 
Тимохов ©   (2004-07-02 12:50) [28]

Удалено модератором



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

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

Наверх




Память: 0.53 MB
Время: 0.039 c
1-1088751504
Vitalik
2004-07-02 10:58
2004.07.18
Сохранение свойств компонента в файл


4-1085686327
Dmitriy Volkov
2004-05-27 23:32
2004.07.18
автозагрузка у юзера с ограниченными правами


4-1086406157
menart
2004-06-05 07:29
2004.07.18
SSPI


1-1088825202
zac
2004-07-03 07:26
2004.07.18
Не запускать два раза


14-1088255685
Nelud
2004-06-26 17:14
2004.07.18
А что бы такое почитать?