Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Теоретически можно брать байты из файла и выполнять как код?   Найти похожие ветки 

 
Юрий Зотов ©   (2012-10-04 15:10) [80]


> Rouse_ ©   (04.10.12 14:06) [65]
> при изменении одного единственного числа или формулы в большинстве
> случаев приходится пересчитывать практически все

То есть, смету фактически считает калькулятор, а не сама программа?


 
Rouse_ ©   (2012-10-04 15:18) [81]

Калькулятор рассчитывает результат формулы, точнее даже не так, там над ним еще один механизм стоит, который передает ему данные ибо формулу можно вычислить только в том случае когда рассчитаны все ее параметры, вот как в примере выше, для того чтобы расчитать значение Ex нужно получить результаты F308 и F611, а чтобы их получить, нужно рассчитать результаты формул входящих в их состав и т.п. пока формулы не кончатся :)


 
Inovet ©   (2012-10-04 15:23) [82]

> [67] картман ©   (04.10.12 14:18)
> Скажем, телебашня Останкино - я не строитель, но рискну
> предположить, что там больше сотни другой позиций

Имхо, порядками ошибся. Сидело 100 человек и считали, да и проще был расчёт, скорее всего.


 
Inovet ©   (2012-10-04 15:30) [83]

> [78] AV ©   (04.10.12 15:01)
> т.е. если один компонент изделия стоит невообразимо больше,
>
> то где же логика считать копейки, отбрасывая при этом тысячи..

Задо копеечных невообразимо много.


 
Игорь Шевченко ©   (2012-10-04 16:01) [84]

Rouse_ ©   (04.10.12 15:18) [81]

Excel изобрели ?


 
Inovet ©   (2012-10-04 16:07) [85]

> [84] Игорь Шевченко ©   (04.10.12 16:01)
> Excel изобрели?

Однако в Excel сметы вряд ли считают. Да и медленный он.


 
Rouse_ ©   (2012-10-04 16:10) [86]


> Игорь Шевченко ©   (04.10.12 16:01) [84]
> Excel изобрели ?

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


> Inovet ©   (04.10.12 16:07) [85]
> Однако в Excel сметы вряд ли считают. Да и медленный он.

Нет, как раз маленькие сметки в экселе и считают, а когда нужно уже что-то серьезное, тогда народ и смотрит в сторону покупки специализированного сметного ПО.


 
Inovet ©   (2012-10-04 16:15) [87]

> [86] Rouse_ ©   (04.10.12 16:10)
> Ну в принципе да, только оптимизированный под конкретную задачу.

Так о любом расчётном ПО можно сказать.

> [86] Rouse_ ©   (04.10.12 16:10)
> Нет, как раз маленькие сметки в экселе и считают

Что-нибудь вроде ремонта санузла?


 
Rouse_ ©   (2012-10-04 16:16) [88]


> Что-нибудь вроде ремонта санузла?

Это лучше у самих сметчиков спрашивать :)


 
картман ©   (2012-10-04 16:21) [89]


> Rouse_ ©   (04.10.12 15:04) [79]


>  Ex := (F308 + F611) * 0.1 * 0.01;

а почему Ех не округляется?)))


> http://rouse.drkb.ru/other.php#round

Вторая, SimpleRoundTo_Str - является эталоном, т.к. производит округление при помощи строк и на нее не действют<b/> погрешности.
описка


 
han_malign   (2012-10-04 16:42) [90]


> SimpleRoundTo_Str - является эталоном

- блин, в деньгах не те порядки чисел - там все в обыкновенных дробях легко считается - весь мировой ВВП, если не зимбабвийских долларах...


 
Rouse_ ©   (2012-10-04 16:48) [91]


> а почему Ех не округляется?)))

А вот с ним то как раз и была проблема.
Ex принимает значение 51,82235, которое при использовании стандартного SimpleRoundTo или нашей предыдущей реализации GsSimpleRoundTo выдаст неверный результат.
Т.е.

 Writeln(FloatToStr(SimpleRoundTo(Ex, -4))); // 51,8223

а должно быть 51,8224


> и на нее не действют<b/> погрешности.

угу, спасибо, поправил...


 
Игорь Шевченко ©   (2012-10-04 16:51) [92]

Rouse_ ©   (04.10.12 16:10) [86]


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


Это надо будет потом посоветоваться как-нибудь. Имеются похожие задачи, оцениваются разные подходы.


 
Inovet ©   (2012-10-04 17:05) [93]

> [82] Inovet ©   (04.10.12 15:23)
> Сидело 100 человек и считали

Какой-то фильм был как обруч изобрел один пацан и предложил заводу изготавливать, назвали хулла-хуп, провели рекламную раскрутку заработали миллионы. Так там бухгалтерия расчитывала стоимость этого изделия. Цех со спротзал, в нём столы, за столами бухглтеры с арифмомерами или счётами даже. Междц ними ходит главный бухгалтер, его помошники каие-то промежуточные итоги сводят от соих подчинённых. Наконец приносят ему киппы бумаг, тот к себе в огромную книгу переписывает, считает. В завершение утирает пот, крупным планом показывает в книге bottom line и под ней его рука выводит что-то вроде 5.12. Несёт дирректорам, те отрицательно качают головой - много, дескать. Главбух при них зачёркивает и пишет 3.64. Все рады. Начинают производство и продажи.


 
Rouse_ ©   (2012-10-04 17:06) [94]


> Игорь Шевченко ©   (04.10.12 16:51) [92]
> Это надо будет потом посоветоваться как-нибудь. Имеются
> похожие задачи, оцениваются разные подходы.

Не вопрос, но в таких вещах лучше будет тебя с Максимом Черных свести, он на порядок подкованней в этих вопросах, чем я :)


 
Rouse_ ©   (2012-10-04 17:53) [95]


> han_malign   (04.10.12 16:42) [90]
>
>
> > SimpleRoundTo_Str - является эталоном
>
> - блин, в деньгах не те порядки чисел - там все в обыкновенных
> дробях легко считается

Порядки не те, но не приятно когда даже в тысячных происходит ошибка округления (как в вышеописанном примере).

Кстати был у нас забавный случай, от нас требовали расширить количество цифр после запятой, в том числе и при округлении. Начали спрашивать, сколько цифр за запятой хотите? Сказали 15 (пятнадцать! За запятой!!!)
Ну в принципе хоть двадцать - нам то че, а что будете измерять с такой точностью? Сказали бетон! Мол в позиции он задается в тоннах, хотим 15 знаков за запятой :))) На наше уточнение, что даже если они будут вводить количество бетона с точностью до грамма, будет достаточно 6 цифр за запятой, они всеравно настаивали что нужно 15 (я даже не знаю как эта цифра называется 1 в минус 15-ой степени).


 
Inovet ©   (2012-10-04 18:03) [96]

> [95] Rouse_ ©   (04.10.12 17:53)

Двоечники они. И что, вы ради них изменили?


 
Rouse_ ©   (2012-10-04 18:20) [97]


> Inovet ©   (04.10.12 18:03) [96]
> Двоечники они. И что, вы ради них изменили?

Ничего не поменяли :)

зы: > han_malign   (04.10.12 16:42) [90]
щас кстати покажу одну штуку, мин 10, код причешу только...


 
Rouse_ ©   (2012-10-04 18:57) [98]


> han_malign   (04.10.12 16:42) [90]

Так вот, фишка данного алгоритма в его высокоточночти, т.е. исправлении погрешности матсопроцессора, а не в том что он может работать с 30 знаками за запятой. Причем данная погрешность может возникнуть даже на числе 0.5.
Вот тут я накатал небольшой пример: http://rouse.drkb.ru/tmp/11.zip

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

ЗЫ: ну о пятьже с оговорками кол-во кирпича и стоимость укладки примерные (я смотрел по ценам укладки куба и подводил формулу с учетом что в кубе 440 кирпичей)

Оть такой вот нюансик...


 
Rouse_ ©   (2012-10-04 20:27) [99]


> Inovet ©   (04.10.12 18:03) [96]
> Двоечники они. И что, вы ради них изменили?

Кстати по поводу двоечников, что-то опять же случайно впомнилось. Один из самых популярных запросов в техподддержку это вопрос о том что сумма по смете не сходится. Присылаются сметы, скриншоты в которых все поля старательно обведены, отдельно присылается расчет ручками и обвинение - вы не правильно считаете :)

У нас у начальника службы ТП даже специальный шаблон заготовлен с цитатой: "Сумма округленных величин не всегда равна округленной сумме этих величин. Округление чисел (5 класс)"


 
картман(зп)   (2012-10-04 20:41) [100]

//WrongPrice := (SimpleRoundTo(Ex, -4) * 1000 - 51820) * 15;
WrongPrice := Ceil( (Ex * 1000 - 51820) * 15);

36

я ж говорю, всегда надо округлять в большую сторону:)


 
Rouse_ ©   (2012-10-04 20:59) [101]


> картман(зп)   (04.10.12 20:41) [100]

Ну это как уж пользователь формулу введет, ему то все варианты доступны :)
Кстати даже после этого изменения обрати внимание на "Разница: -2,26864358410239E-8" что опять указывает на наличие погрешности :)


 
картман(зп)   (2012-10-04 21:06) [102]


>  опять указывает на наличие погрешности :)

у меня вылетает на SimpleRoundTo_Asm - XE, win7 64, глянуть не могу, но да бог с ней.
 Эту погрешность придумали люди - сметчики, а по сути ошибки нет. Математической нет, есть человеческая, т.е. с помощью таких округлений  вычисления подгоняются под человеческое понимание "как оно там должно быть". ИМХО(но уверен в этом на 95%)


 
Rouse_ ©   (2012-10-04 21:15) [103]


> у меня вылетает на SimpleRoundTo_Asm - XE, win7 64, глянуть
> не могу, но да бог с ней.

А вот это плохо, я правда тестировал на D7/2007/2010 и чес говоря не должно на других вылетать. Проверю тогда на триалке.

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


 
картман(зп)   (2012-10-04 22:05) [104]


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

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


 
картман(зп)   (2012-10-04 22:18) [105]

или ты о том, что если я сейчас посчитаю эту формулу столбиком, у меня получится 36 ровно(или очень близко)?


 
Rouse_ ©   (2012-10-04 22:30) [106]


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

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

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

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

А по поводу как из 35.25 получается 36 - для этого и придуманы чиновники генерирующие пачками методики описывающие в каком случае нужно округлить прежде чем умножить, где сначала нужно сложить перед тем как поделить, а где сначала умножить а потом сложить :)

Если мы не будет делать так как ими написано - нас покупать никто не будет.


 
картман(зп)   (2012-10-04 22:42) [107]

теперь все ясно:)


 
Дмитрий С ©   (2012-10-05 00:29) [108]


> Сидело 100 человек и считали, да и проще был расчёт, скорее
> всего.

Это ж сколько ваша контора дармоедов без работы оставила :))


 
Inovet ©   (2012-10-05 01:14) [109]

> [99] Rouse_ ©   (04.10.12 20:27)
> У нас у начальника службы ТП даже специальный шаблон заготовлен
> с цитатой: "Сумма округленных величин не всегда равна округленной
> сумме этих величин. Округление чисел (5 класс)"

Это многие не понимают, а если и понимают, то всё равно думают - что-то здесь нечисто, это из-за того что в программе так считается.


 
Inovet ©   (2012-10-05 01:26) [110]

> [98] Rouse_ ©   (04.10.12 18:57)

А чем не устраивает DecimalRounding_JH1?


 
Юрий Зотов ©   (2012-10-05 01:35) [111]

Есть 2 суммы S1 и S2. И есть коэффициент индексации K. Все три значения прописаны в федеральном законе.

Теоретически должно быть так: S2=K*S1. Но не получается, потому что S1 и S2 имеют по 8 десятичных знаков, а K округлили до 4-х знаков. Ясное дело, разница между S2 и произведением K*S1 начинается тоже в 4-м знаке.

Как проводить индексацию? Предлагаю: давайте я рассчитаю точное значение K=S2/S1 и его буду использовать. Отвечают: нет, так нельзя, потому что противоречит закону. K надо брать таким, как в нем сказано.

ОК, тогда давайте будем использовать S2 равное K*S1. Отвечают: так тоже нельзя, потому что тоже противоречит закону. S2 надо брать таким, как в нем сказано.

Тупик. И возникает вопрос: те, кто принимал такой закон - они хотя бы в начальной школе вообще-то учились? И хоть раз по арифметике больше двойки получали?


 
картман(зп)   (2012-10-05 01:50) [112]


> И хоть раз по арифметике больше двойки получали?

"по арифметике" лишнее


 
Inovet ©   (2012-10-05 02:07) [113]

> [111] Юрий Зотов ©   (05.10.12 01:35)
> те, кто принимал такой закон

В законах стали, спустя несколько лет, учитывать округления. Но тоже странно. Например, по одному человеку допускается погрешность 0.01 рублей в месяц. Ладно, то что на предприятии на внутренних округлениях погрешность, бывает, больше накапливается, не должно влиять, пусть. Но в то же время итог по всем не должен превышать 1 рубль, как за месяц, так и за год. таким образом при численности свыше 100 человек закон противоречив. В реальности оно, конечно, распределяется в обе стороны и укладывается в допуск, но может быть такое, что и не уложится. Что делать тогда? А просто взять и эти 0.01 рублей у некоторых в другую сторону вручную поправить, закон же это допускает.


 
Германн ©   (2012-10-05 02:07) [114]


> Округление чисел (5 класс)

И у меня тоже порой возникают очень сложные(точнее трудно понятные) проблемы из-за округления.
Но в 5-том классе их не поймёт никто :)


 
Inovet ©   (2012-10-05 02:13) [115]

> [113] Inovet ©   (05.10.12 02:07)
> так и за год

нет, за год - это я соврал.


 
han_malign   (2012-10-05 08:52) [116]


> фишка данного алгоритма в его высокоточночти

- дык я не о том, а о натуральных дробях - (N1+...+Nk)/100
- в приведенной задаче все считается в целых числах, а потеря точности на RoundToDecimal(var Numerator, var Denominator, Digit) - с возвратом знаменателя к 10^x - абсолютно управляема...
Если бы не F6xx в которых знаменатель 100000000 получается ((n1/100)*(c/1000)*(n2/1000))  - можно было бы и Currency обойтись.


 
han_malign   (2012-10-05 09:05) [117]

и bigint не надо, в крайнем случае(для 15 знаков после запятой) - 3 int64 на представление смешанной дроби...



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

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.71 MB
Время: 1.073 c
2-1332757380
leklerk
2012-03-26 14:23
2013.03.22
Аналог ExecSQL для ADODataSet


2-1339918135
Pcrepair
2012-06-17 11:28
2013.03.22
Структура кода при обработке текстов


9-1193070314
lubass
2007-10-22 20:25
2013.03.22
Обратная функцыя к RGB() существует?


15-1333895122
Юрий Зотов
2012-04-08 18:25
2013.03.22
Пропали иконки


1-1295433352
noob_one
2011-01-19 13:35
2013.03.22
Массивы и указатели. Что я делаю не так?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский