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

Вниз

Всегда ли функции FloatToStr и StrToFloat делают однозначный   Найти похожие ветки 

 
Вещь   (2008-02-15 05:19) [0]

перевод туда и обратно?

Имеется в виду превращение 1 в 0.99999999 и т. п.

Может такое быть? И если да, то как избежать?


 
Anatoly Podgoretsky ©   (2008-02-15 07:47) [1]

> Вещь  (15.02.2008 05:19:00)  [0]

Целые всегда точные, но лучше в этом случае применять Int функции


 
Вещь   (2008-02-15 08:00) [2]

С целыми всё понятно. Интересуют именно вещественные и не круглые.


 
Рамиль ©   (2008-02-15 09:02) [3]


> Всегда ли функции FloatToStr и StrToFloat делают однозначный

нет.

> И если да, то как избежать?

зачем?


 
Ins ©   (2008-02-15 10:39) [4]


> Целые всегда точные

Не всегда.


 
Правильный_Вася   (2008-02-15 11:11) [5]


> > Целые всегда точные
> Не всегда.

т.е. целая Int(1) <> целой Int(1) ???


 
Marser ©   (2008-02-15 11:18) [6]

Дробная часть числа в двоичной форме хранится в виде суммы степеней двойки, также как и целая, только эти степени отрицательные, соответственно - 0.5, 0.25, 0.125, 0.0625 и т.д., соответственно если твоя дробь в некотором приближении не раскладывается точно как сумма этих степеней, то точного результата не будет.


 
Anatoly Podgoretsky ©   (2008-02-15 11:32) [7]


> С целыми всё понятно. Интересуют именно вещественные и не
> круглые.

1 в твоем примере, это целое, а е дробное.


 
Mystic ©   (2008-02-15 11:43) [8]

Преобразования неоднозначно хотя бы из-за NAN.
Избежать просто: сохранять как последовательность байт.


 
Ins ©   (2008-02-15 11:46) [9]


> т.е. целая Int(1) <> целой Int(1) ???


Речь не об этом. А о том, что целые числа не всегда точно представляются в вещественном формате.


> Дробная часть числа в двоичной форме хранится в виде суммы
> степеней двойки, также как и целая


Это в случае фиксированной точки так. А в случае плавающей - целая часть отдельно не хранится. Хранится мантисса (число от 1 до 2) и экспонента - степень двойки, на которую умножается мантисса. И далеко не все целые числа можно точно в таком формате представить.


 
Anatoly Podgoretsky ©   (2008-02-15 11:52) [10]

> Ins  (15.02.2008 11:46:09)  [9]

В пределах разрядной сетки всегда точно, там же для нормализации делается деление по модулю 2


 
AndreyV ©   (2008-02-15 13:15) [11]

> [0] Вещь   (15.02.08 05:19)


А откуда возник вопрос? Всмысле, может не имеет существенного значения?


 
Marser ©   (2008-02-15 13:53) [12]


>
> Это в случае фиксированной точки так. А в случае плавающей
> - целая часть отдельно не хранится. Хранится мантиса (число
> от 1 до 2) и экспонента - степень двойки, на которую умножается
> мантисса. И далеко не все целые числа можно точно в таком
> формате представить.

Я упрощенно писал о том, как хранится дробь, в частности, мантиса. Формат записи с плавающей запятой сути не меняет - редкое дробное число можно представить совершенно точно.


 
Amoeba ©   (2008-02-15 13:57) [13]


> Вещь   (15.02.08 05:19)

Читаем это до полного просветления:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
Вещь   (2008-02-16 03:30) [14]


> Mystic ©   (15.02.08 11:43) [8]
>
> Преобразования неоднозначно хотя бы из-за NAN.
> Избежать просто: сохранять как последовательность байт.


А надо в виде вещественных.


> AndreyV ©   (15.02.08 13:15) [11]
>
> > [0] Вещь   (15.02.08 05:19)
>
> А откуда возник вопрос? Всмысле, может не имеет существенного
> значения?


Надо чтоб сохранялись в виде текста, и можно было отредактировать в ручную, в случае же, если редактирования небыло, то цифры должны преобразоваться обратно безо всяких искажений.


 
korneley ©   (2008-02-16 09:03) [15]


> Надо чтоб сохранялись в виде текста

А зачем тогда вообще вещественные типы? Строка, только цифры, в первом символе возможен +/-, один раз допускаем "DecimalSeparator".


 
AndreyV ©   (2008-02-16 18:45) [16]

> [14] Вещь   (16.02.08 03:30)
> Надо чтоб сохранялись в виде текста, и можно было отредактировать
> в ручную, в случае же, если редактирования небыло, то цифры
> должны преобразоваться обратно безо всяких искажений.


Наверно, не "сохранялись в виде текста", а число преобразовывалось в текст.
Тогда проверяий были ли изменнения в тексте, и, если были, преобразовывай
назад и сохраняй.
Или посмотри другие функции преобразования в текст без округления.


 
DiamondShark ©   (2008-02-16 23:26) [17]


> Надо чтоб сохранялись в виде текста, и можно было отредактировать
> в ручную, в случае же, если редактирования небыло, то цифры
> должны преобразоваться обратно безо всяких искажений.

Понятно. Значит, проблемы, всё-таки, нет.


 
korneley ©   (2008-02-17 07:09) [18]


> DiamondShark ©   (16.02.08 23:26) [17

Есть. И не в клозетах %)  Если использовать перевод строки в double с целью проверки "правильности" ея написания... А затем назад в строку, и сохранить. Жесть!


 
Вещь   (2008-02-18 06:49) [19]


> AndreyV ©   (16.02.08 18:45) [16]
>
> > [14] Вещь   (16.02.08 03:30)
> > Надо чтоб сохранялись в виде текста, и можно было отредактировать
> > в ручную, в случае же, если редактирования небыло, то
> цифры
> > должны преобразоваться обратно безо всяких искажений.
>
> Наверно, не "сохранялись в виде текста", а число преобразовывалось
> в текст.


Нет, надо чтоб сохранялось в виде текста, а потом грузилось.


 
AndreyV ©   (2008-02-18 08:08) [20]

> [19] Вещь   (18.02.08 06:49)
> Нет, надо чтоб сохранялось в виде текста, а потом грузилось.

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


 
Вещь   (2008-02-19 06:33) [21]


> AndreyV ©   (18.02.08 08:08) [20]
>
> > [19] Вещь   (18.02.08 06:49)
> > Нет, надо чтоб сохранялось в виде текста, а потом грузилось.
>
> Ну и не забивай голову тогда. Точность ведь не изменится.
>


А биты числа?


 
korneley ©   (2008-02-19 08:15) [22]


> Вещь   (19.02.08 06:33) [21]
> А биты числа?

??? Какие биты? (какие ноги? (с) Задние или передние? Ещё раз: если вам  "Надо чтоб сохранялись в виде текста, и можно было отредактировать в ручную", то вещественные типы не нужны. Вместе с их битами, мантиссами и пр. Обычная строка, которая замечательно редактируется в TEdit - е. При желании - навесить обработчик OnKeyPress дабы лишнего в едит не навводили. Все. Сохраняйте свою строку. "В виде текста" :)



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

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

Наверх




Память: 0.52 MB
Время: 0.086 c
11-1186479034
Preddy
2007-08-07 13:30
2008.03.30
MouseMove как в VCL


3-1189144627
xman
2007-09-07 09:57
2008.03.30
DevExpress cxGrid Filter


15-1203169723
Andy BitOff
2008-02-16 16:48
2008.03.30
Выбираем DVD-player


15-1202993739
Тарантас
2008-02-14 15:55
2008.03.30
Установка SVN как сервера под Windowsбез Apache


2-1204243398
максим
2008-02-29 03:03
2008.03.30
как сделать активным окно