![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать количество знаков после запятой?
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]
>Вы, сударь попытались бы лучше объяснить в чем
>проблема а не упражнятся в намеках.
я, вообще-то, сам решу, как и что мне писать. предпочитаю учить работать головой, а не челюстями. если в голове есть моск, то намёка достаточно. если нет -- то даже открытый текст не поможет.