Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать количество знаков после запятой?


Страницы:   1 2 3

arhis ©   (2006-09-21 16:57:00) 

узнаю так:


met:=2;
PrBuf:=(Deal.Price-Int(Deal.Price))*10;
While true do
 begin
  PrBuf:=PrBuf*10;
  if (PrBuf-Int(PrBuf))=0 then break;
  inc(met);
 end;

работает кроме случая 100.023
В этом случае релультат вычитания аномален.
Может это вообще можно както прощще сделать?


Ketmar   (2006-09-22 19:01:00) [1]

>[42] arhis 22-Sep-2006, 18:29
>Ketmar c   (22.09.06 18:10) [41]
>если вы перечитаете свои, спозволения сказать
>посты, в отрыве от беседы, то поймете их
если брать что угодно вне контекста, то это будет флуд.

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

>Опять же не меряйте всех по своей мерке.
да я бы рад все мерять по своей, но далеко не все дотягивают.


arhis   (2006-09-22 18:29:00) [2]

Сегодня пятница, модератор явно спит можно и поболтать.

han_malign ©   (22.09.06 13:51) [40] Где вы у меня амбиции то нашли? В третий раз напоминаю название ветки. Не надо мерять всех по своей мерке - у меня амбиций никаких. Что же касается VB Script, то вы просто сели в лужу, потому как все прикладное программирование уже практически выродилось в написание скриптов бейсике. И именно по этой причине я пишу в дельфи, а не занимаюсь численными методами в маткаде. Если вы пишете по другой то это только ваши проблемы. К тому же я смотрю статьи вы не читали иначе не стали бы городить весь этот бред.

Ketmar ©   (22.09.06 18:10) [41]

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


Ketmar   (2006-09-22 18:10:00) [3]

ну вот. если даже я не смог пронять -- случай явно безнадёжный. решение всё то же -- магазин хозтоваров...


han_malign   (2006-09-22 13:51:00) [4]


> У моего учителя по математике была любимая поговорка - пускай рабы считают.

- а если название дисциплин - "Численные методы" и "Дискретная математика" - вызывают у вас недоумение, вам лень изачать иснтрументарий - то, для уровня ваших абстрактых амбиций, прекрасно подойтет Visual Basic Scripts в MSOffice...
"Microsoft - ты думаешь за нас"...


han_malign   (2006-09-22 13:40:00) [5]


> Любой программист, это в первую очередь алгоритмист, и алгоритм
> и есть его цель, все остальное для рабов.

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


Virgo_Style   (2006-09-22 13:21:00) [6]

arhis   (22.09.06 12:48) [37]
Господа, у вас тут некоторые непонятности в масштабах происходящего.


Плакал.

arhis   (22.09.06 12:48) [37]
королю горы абстракций, то есть мне


Рыдал!!!)


arhis   (2006-09-22 12:48:00) [7]

Наиль ©   (22.09.06 11:43) [35]

А я тебе еще раз говорю, что эта чертова погрешность не ноль.

han_malign ©   (22.09.06 12:15) [36]

Господа, у вас тут некоторые непонятности в масштабах происходящего. Судя по вашей сетевой активности все вы тут читали про закон дырявых абстракций. Если учесть что любой человек, который пишет в дельфях находится на самой вершине этой иерархии абстаракций,  именно по этому я и пишу в дельфях, система должна была меня оградить от такой дыры прямо в фундаменте. Я, грешным делом, думал что так оно и есть. Что, по моему в полне очевидно, потому как этому самому королю горы абстракций, то есть мне, глубочайше все равно с какой погрешностью рассчитан этот ноль. И в какой системе он находиться, да хоть в десятичных остатках.

Теперь по поводу тупых. У моего учителя по математике была любимая поговорка - пускай рабы считают . Любой программист, это в первую очередь алгоритмист, и алгоритм и есть его цель, все остальное для рабов.

Простите меня за столь откровенный флуд, Ketmar © с утра так настроил.
В заключении хочу сказать спасибо Palladin © , который не стал выпендриваться и хоть как то закрыл мне эту дыру.


han_malign   (2006-09-22 12:15:00) [8]


> дебаггер мне радостно докладывает что у меня и там и там 23

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


Наиль   (2006-09-22 11:43:00) [9]


> [15] arhis   (21.09.06 17:12)

Я смотрю ты так и не удосужился разобраться с [12]+[14].
Показываю ещё раз
Твой вариант
if (PrBuf-Int(PrBuf))=0 then break;

Правильный вариант
Uses Math
if IsZero(PrBuf-Int(PrBuf)) then break;

Посмотри устройство IsZero.


Amoeba   (2006-09-22 11:31:00) [10]

Автору вопроса настоятельно рекомендуется прочесть статью "Неочевидные особенности вещественных чисел":
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


Ketmar   (2006-09-22 10:42:00) [11]

вдогон: интересно, какие должны быть задачи, если задумываться о том, как машина представляет числа -- не надо. "трамвай работает так -- вж-ж-ж, дзинь, дзинь"?


Ketmar   (2006-09-22 10:41:00) [12]

>[31] arhis 22-Sep-XLI A.S., 10:36
>Ketmar c - флудер.
ты не первый. тут где-то на сайте есть ссылочка -- "написать админу". можешь поделиться с Максимом ценным наблюдением. или вот -- отписать конкретно модератору этого раздела. говорят, тоже помогает.


arhis   (2006-09-22 10:36:00) [13]

Ketmar © - флудер.

palva ©   (21.09.06 19:58) [27]

Честно сказать я не очень понимаю почему дебаггер мне радостно докладывает что у меня и там и там 23 а вычесть их не может. Странное поведение системы в целом. Меня не волнуют с какой погрешностью комп посчитал что в этой ячейке у меня 23. Ему самому на это наплевать когда он мне показывает что там 23 а при арифметической операции он вдруг про эту погрешность вспоминает.
Особенно мне это не понятно изза того что программа только и делает что умножает на 10 в разных степенях и никаких проблем до этого момента не было.

По поводу остального могу сказать что не даром обратился в форум для начинающих и уж тем более никогда не задумывался о представлении чисел в двоичной системе. У меня совершенно другие задачи


Palladin   (2006-09-22 08:29:00) [14]


> arhis

используй Currency и не мучайся


Ketmar   (2006-09-21 20:43:00) [15]

>[28] Virgo_Style(c) 21-Sep-XLI A.S., 19:59
>Это... хм. Глупость какая-то, по всей видимости %-)
почему-то и мне так показалось. %-)


Virgo_Style   (2006-09-21 19:59:00) [16]

Ketmar ©   (21.09.06 19:41) [26]
Это... хм. Глупость какая-то, по всей видимости %-)


palva   (2006-09-21 19:58:00) [17]

> Я беру число 0,023 и умножаю его на 100, и всегда получаю 2,3 хоть тресни.
В этом случае вы правы. Но ваша программа ведь делает другое. Число 0,023 не представимо точно в 2 с/c, значит любая двоичная ЭВМ будет хранить его приближенно в виде округленной периодической дроби. При умножении на 100 разрядная сетка числа переполнится, поэтому процессор  также округлит результат. В результате вы не получите 2,3. Тем более, что число 2,3 также невозможно представить в ЭВМ, хоть тресни. Другое дело, что если вы переведете результат в 10 с/с и округлите до десятых, то получите 2,3. В задачах подобных вашей числа хранят в виде целых чисел (как результат умножения исходных чисел на какое нибудь большое число) либо в виде десятичных дробей, но тогда самостоятельно реализуют арифметику на таких числах или используют готовые пакеты.

Вопросы подобные вашим задаются раз в неделю и уже всем надоели. Тем более, что они часто сопровождаются нежеланием задающего вопрос понять, что происходит на самом деле, и как там внутри всё устроено. Отсюда такая реакция. Не обижайтесь.


Ketmar   (2006-09-21 19:41:00) [18]

>[25] Virgo_Style(c) 06-09-21 19:37
это что такое, позвольте спорсить? не бывает погрешностей у целых чисел. %-)


Virgo_Style   (2006-09-21 19:37:00) [19]

arhis   (21.09.06 18:52) [22]
я не совсем понимаю причем тут погрешности?


if Trunc( 10 ) = 0 then Label1.Caption:='ровно десять' else Label1.Caption:='имеется погрешность';


Ketmar   (2006-09-21 19:34:00) [20]

>[23] arhis 06-09-21 18:54
>Ketmar c   (21.09.06 18:37) [21]
>Вы, сударь попытались бы лучше объяснить в чем
>проблема а не упражнятся в намеках.
я, вообще-то, сам решу, как и что мне писать. предпочитаю учить работать головой, а не челюстями. если в голове есть моск, то намёка достаточно. если нет -- то даже открытый текст не поможет.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо