◄ 1 2 |
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
Nesh 28.10.16 - 22:10 | Почему число 0.03472 1с округляет Окр(0.03472,2) как 0.03? Так задумано, или это общеизвестный баг (фича)? | ||
Aleksey 101 - 29.10.16 - 18:38 | (99) ?? На основание каких математических правил нужно сначала умножать, потом делить? Ты где в 5 классе учился? Или сразу с детского сада в 1Сники пошел? | ||
Aleksey 102 - 29.10.16 - 18:42 | 10/3*3 скобок нет, операции умножения и деления равнозначемые, значит сначала нужно 10/3 получим 3,3(3) (в скобках 3 означает что 3 в периоде, так обычно в школе учат записывать), а потом полученный результат умножаем на 3, получаем 10.
Если конечно округлять до 2 знака, то получим 10/3 = 3,33 3,33*3 = 9,99 Может на твоем калькуляторе стоит округление? (есть у некоторых такая функция, когда он сам округляет) | ||
Дарлок 103 - 29.10.16 - 18:44 | (101) на основании практики. Лучше сначала умножить, а потом поделить. Для увеличении точности вообще можно предварительно умножить допустим на 10 000, но утверждать, что процессор сначала умножает на 10 000 затем еще раз умножает, затем делит и еще раз делит на 10 000 может только 1с-ик с юга ))
(102) ессно стоит и используется математика с плавающей точкой. Такая фигня есть на всех современных калькуляторах инжереных, а вот бухаглтерские калькуляторы используют обычную математику, там будет 9,9 | ||
Aleksey 104 - 29.10.16 - 18:45 | И по поводу SQL, учись правильно приводить к типам. У тебя тип int, т.е. целое, а значит результат вычислений будет целое число, т.е. на для скуле это означает
10/3 = 3,3333, но так как результат у нас целое число значит 10/3 = 3 Потом умножение 3*3 = 9 Т.е. округление тут вообще непричем, причем тут только тип числа | ||
Aleksey 105 - 29.10.16 - 18:45 | (103) Мало ли кому что лучше, есть правила математики, и по ним счетается | ||
Дарлок 106 - 29.10.16 - 18:47 | (105) и то этой фигней с перестановкой операций приходися заниматься из за отсутсвия нормальных типов данных . К математике это никакого отношения не имеет. | ||
MrStomak 107 - 29.10.16 - 19:35 | (100) Так понимаю, что обычно эти виляния задницей вместо ответа на конкретный вопрос, работают.
Ок. Молодец. Ты смог поставить на домашнюю машину windows с сalc. Возьми с полки пирожок, ведь ты настоящий программист, а не тупой 1сник. | ||
MrStomak 108 - 29.10.16 - 19:43 | (105) Да как бы считай как хочешь. Просто в одном случае у тебя будеь 9.99, в другом 10. Когда из-за этого пойдут косяки, говори что тупая 1с виновата | ||
MrStomak 109 - 29.10.16 - 19:50 | |||
dmpl 110 - 29.10.16 - 19:57 | (99) В Си как раз порядок четко определен - как в математике, слева навраво, никаких переставлений. Как программист пишет - так и должно быть посчитано. И в стандарте так прописано именно чтобы разные реализации давали один и тот же результат.
(109) А теперь вопрос: отчего погрешность будет больше: от умножения и, как следствие, потери точности из-за не влезших разрядов или от деления и того же следствия. Затем объясни, почему именно умножением лучше терять точность, чем делением. | ||
ivan-china-bk 111 - 29.10.16 - 21:31 | (96) 1С - это, к сожалению, парапрограммисты. Но все равно обидно, что в школе все не умеют учиться. | ||
MrStomak 112 - 30.10.16 - 09:51 | (110) Потому что после умножения у тебя всегда будет конечное число разрядов, а после деления - не всегда.
Твой капитан. | ||
MrStomak 113 - 30.10.16 - 09:55 | (104)
Да какие проблемы - приводи типы, чего мне то эти рекомендации? Сделай select cast(10 as numeric (20,17))/3*3 | ||
dmpl 114 - 30.10.16 - 10:15 | (112) Какая разница, если этих разрядов в том же float кот наплакал? И, например, 30 000 001 там невозможно записать в принципе - только 30 000 002 или 30 000 000. Да и в double не сильно лучше - перемножаешь пару чисел чуть точнее float - и уже теряешь точность. | ||
MrStomak 115 - 30.10.16 - 10:28 | (114)
Вот ты философски подходишь - а какая разница, если в любом случае можно выйти за границы выделенной памяти? Но пример с 10/3*3 это ежедневная убийственная практика. Как программист, ты можешь ограничивать разрядность используемых операндов и четко контролировать - сколько максимально потребуется после операции умножения. Дробная часть при этом очень редко когда требуется больше 3. У тебя есть возможность написать алгоритм так, что он будет работать без ошибок. В случае с делением ты никогда заранее не сможешь соломку подстелить. 10/3*3 постоянно возникает при распределении по базе. Надежный алгоритм распределения по базе будет содержать строчку ОсталосьРаспределить*ТекущееЗначениеБазы/ОсталосьБазы. Если поменять местами умножение и деление - постоянно будет то здесь то там возникать 9.999999999 и это будет генерировать просто кучу проблем. | ||
nordbox 116 - 30.10.16 - 10:45 | а ты попробуй число Пи округли ))) | ||
wertyu 117 - 30.10.16 - 11:00 | пятница шла третий день ) | ||
zak555 118 - 30.10.16 - 12:27 | |||
Chameleon1980 119 - 30.10.16 - 12:56 | жутко интересно | ||
dmpl 120 - 30.10.16 - 13:09 | |||
MrStomak 121 - 30.10.16 - 13:39 | (120)
Я вижу какие-то проблемы с формальной логикой. 1. Есть операция деления, которая выдает не влезающий в разрядность результат регулярно и независимо от разрядности операндов. 2. Есть операция умножения, которая выдает не влезающий в разрядность результат только в том случае, если сумма разрядностей операндов не поместится в отведенные для числа 38 разрядов. Ты называешь случай из п.1 частным, а из п.2 - общим. А на самом деле всё наоборот. Случай, когда у тебя после перемножения будет число больше 99 999 999 999 999 999 999 999 999 999 999 (минус разряды на дробную часть) - частный и предсказуемый (ты же знаешь максимальную разрядность операндов!), а вот то, что в любой момент деление может выдать результат, который не уместиться НИ В КАКУЮ разрядность - общий. Сначала_умножать_потом_делить | ||
MrStomak 122 - 30.10.16 - 13:46 | (114) Блин, если ты говоришь про double и float то это вообще теряет смысл.
Эти типы не хранят точных значений и допускают погрешность по своей природе. В отношении данных типов нет смысла в переставлении операций - погрешность будет всегда. Я говорю про работу с типами, которые используются в финансовых программах, т.е. БЕЗ плавающей точки. decimal, numeric - по разному могут называться, нативного Си-шного типа для этих целей нет. | ||
dmpl 123 - 30.10.16 - 19:26 | (121) Общий случай: есть числа с мантиссой x знаков, все разряды которой используются. И что при умножении, что при делении таких чисел будет потеря точности. Случай, когда используются не все разряды - частный.
(122) В финансовых программах все еще печальнее, ибо при фиксированной запятой результат умножения может просто не поместиться в переменную и округлиться до максимального влезающего в нее числа. Тут не то что последний разряд может на единичку измениться - тут в разы неправильный результат может быть. И опять правило не работает. | ||
MrStomak 124 - 30.10.16 - 19:52 | (123) Мне сколько раз тебе повторять надо, что количество разрядов после умножения - известная величина?
Условно, в 1с принято использовать Число(15.2) Перемножая два таких числа, я точно знаю, что у него будет не более 34 разрядов при имеющемся ограничении в 38. Проблема возникнуть не может в принципе. | ||
Mauser 125 - 30.10.16 - 20:06 | (121) Простите, что вмешиваюсь, а вот если множитель меньше единицы, ну так вот получилось при вычислении переменной, что тоже надо сначала делить, еще раз извините? | ||
Torquader 126 - 30.10.16 - 20:10 | (125) Ситуации, когда нужно решать с выбором порядка стандартных операции - обычно описаны в численных методах, и там есть объяснение каждого случая.
В 1С никто не считает с 17 и более знаками после запятой, а все денежные величины считаются в минимальной денежной единице. Что касается округления, то есть системы где не только округляется вниз всё, что меньше 0.5 и вверх всё, что больше, но и 0.5 округляется вверх или вниз исходя из чётности или нечётности цифры в младшем разряде единиц - чтобы была симметрия. | ||
dmpl 127 - 30.10.16 - 20:15 | (124) Это и есть частный случай. Бери числа из 38 знаков - и перемножай. Общий случай на то и общий, что нет никаких оговорок. Правило для общего случая должно работать ВСЕГДА, вне зависимости от типов чисел и их значений. Как только ты вводишь оговорки - это становится частным случаем. | ||
MrStomak 128 - 30.10.16 - 20:59 | (125) Сначала надо не делить, а умножать.
меньше или больше единицы при этом операнд - без разницы. (127) Дружище. Когда говорят "В общем случае следует..." - то это не означает, что высказывание применяется для 100% вариантов. Поэтому то, что ты приводишь какой-то запредельный вариант, когда это не соблюдается - это ничего не меняет. Если, конечно, ты не хочешь сказать, что в общем случае программисту приходится работать с числами в 38 разрядов. Чего ты хочешь добиться этими заигрываниями с терминологией - я не пойму. Любой вменяемый 1с-ник должен сначала умножать, а потом делить. Потому что с 38разрядными величинами в 1С работать нет необходимости, а ошибки в копейки лезут отовсюду. Я тебя не заставляю так делать - дели себе на здоровье, потом лови ошибки с этих "частных случаев". Объяснять в 5й раз тоже самое смысла вообще не вижу - все равно же покривляешься, а сам в следующий раз будешь прописывать умножение сначала - на всякий случай. | ||
Повелитель 129 - 31.10.16 - 07:29 | (0) 0.03 правильно. Автор профан. | ||
Pahomich 130 - 31.10.16 - 07:46 | 10/3*3 тем ближе к 10, чем выше разрядность после запятой вычислительной техники. Интересно, какая разрядность мозга, если он дает точно 10? Рекламное место пустует | ||
ДемонМаксвелла 131 - 31.10.16 - 08:18 | (130) очевидно, что никакая. Он аналоговый, а не цифровой. | ||
_KaA 132 - 31.10.16 - 08:39 | |||
butterbean 133 - 31.10.16 - 08:40 | (130) мозг кроме арифметики при решении подключает еще и логику, если бы он считал как компьютер человек при вычислении завис бы очень надолго | ||
Pahomich 134 - 31.10.16 - 08:44 | (131,133) Ваши предположения забавны... | ||
33554432 135 - 31.10.16 - 09:00 | Офигеть просто. Раз уж тут столько экспертов, может заодно подскажете, почему функция Цел(1) возвращает 1? | ||
Дарлок 136 - 31.10.16 - 09:14 | (135) очевидно, что он сначала умножает на ноль, а затем делит. (цы) математики с юга России | ||
ДемонМаксвелла 137 - 31.10.16 - 09:21 | (134) чего смешного то? Ты, видимо, имеешь в виду, что мозг человека считает с бесконечной точностью, да?
Давай мне корень квадратный из числа пи вычисли в уме. Меня устроит первая тысяча знаков, не надо все. | ||
newbling 138 - 31.10.16 - 09:45 | > округление нужно начинать с самой последней цифры по цепочке
wat | ||
Джо-джо 139 - 31.10.16 - 09:50 | с какой цифры не начинай, а 1,47 всё равно меньше 1,5. | ||
newbling 140 - 31.10.16 - 10:11 | Какое-то деревянное округление. | ||
MrStomak 141 - 31.10.16 - 10:20 | (136)
В том ВУЗе, где ты купил диплом, должны были тебе хотя бы намекнуть, что указанное выражение вернет не 1, а неопределенность, дабы ты вот так вот не позорился на форуме. Хотя со скоростью твоего переобувания от (85) до (103), не сомневаюсь, что ты сейчас опять развернёшь свое высказывание. Приступай. | ||
Homer 142 - 31.10.16 - 10:25 | Я честно говоря в а*уе от простейшего вопроса. Кто все эти люди)) | ||
Дарлок 143 - 31.10.16 - 10:29 | (141) у тебя не только с логикой плохо, но и с ЧЮ =) | ||
MrStomak 144 - 31.10.16 - 10:36 | (143) Съехал на "Это я всё шутил", засчитано. Не подвёл, молодец! | ||
Дарлок 145 - 31.10.16 - 10:42 | (144) в отличии от тебя я !знаю!, как должен работать компилятор - это регулируется стандартами, и я !умею! работать с учетными системами, а в частности типами, где малое число знаков после запятой и как добиваться при этих ограничениях приемлемой точности.
А самое главное, понимаю где начинается одно и заканчивается другое и в чем разница. ЗЫ. Было бы забавно, когда ты хочешь поделить, а тебе компилятор вместо это делит... вот жизнь бы, раем не казалась и да, проведи эксперемент. Возьми калькулятор, подели 10 на 3, сохрани полученное значение в Memory, затем очисти .. извлеки из памяти число и умножь на 3 и удивись... Или возьми хардкорный инженерный калькулятор (на винде не получится), затем подели 10 на 3 и умножай на 1000, пока последний знак не станет отличаться от 3. Я это проделывал, когда мне было лет 8-9, потому что было интересно, а что выйдет. | ||
MrStomak 146 - 31.10.16 - 10:53 | (145)
А вот эти вот видения, в которых ты увидел мои рассуждения о работе компилятора - они часто приходят? Не пора ли обратиться с ними к соответствующему врачу? Я не заявлялся на знатока работы инженерных калькуляторов. Я не знаю, про что ты и как оно написано. Я отталкивался от предпосылки, что раз он "инженерный", то он, возможно, не должен использовать вещественные типы, дабы не возвращать полную фигню в ряде случаев. Единственный приходящий мне на ум вариант с сохранением точности - отталкиваться от целочисленных типов, храня иррациональные значения в виде дроби - ровно так, как мы записываем это в математике. Такая запись сложнее, там по сути не будет записано конечного значения, арифметические операции с таким "типом" будут выполняться дольше - но ведь инженерный калькулятор не должен хвастаться бешеной скоростью операций? Техническая реализация такого типа в ЯП будет в конечном итоге перестановкий операций - потому что если храним число в виде числителя и знаменателя, значит откладываем деление на потом. Но ты, очевидно, рассуждаешь про вещественные типы и предлагаешь их использовать в программах, которые считают деньги. Тем самым, ты наглядно демонстрируешь свою профнепригодность - очень хорошо, что 1С при проектировке примитивных типов в платформе убрали от твоих шаловливых рук такую возможность, чтобы ты мог на форуме поныть "приходится переставлять, так как нет правильных типов". | ||
Дарлок 147 - 31.10.16 - 10:57 | (146) слив засчитан...
прежде чем писать свое "особо важное мнение" надо было почитать ветку и подумать нужно ли оно здесь. >>Единственный приходящий мне на ум вариант с сохранением точности с этим тебе только в секту, причем в любую. | ||
MrStomak 148 - 31.10.16 - 11:09 | (147)
Когда не можешь возразить аргументом - напиши как можно быстрее "Слив засчитан" - будь крутым пацаном, епт! Удивлен, что ты не подкрепил свою позицию какими-нибудь ярлыками в стиле "1с-ник с юга", ну там или "женщина", "гуманитарий" - ведь это единственное, что придает весь твоим словам в твоих же глазах. P.S. Судя по отсутствию комментариев про вещественные типы, очевидно, я угадал. Порой, в качестве аттача к сообщению, хочется приложить фотку Лаврова. | ||
bodri 149 - 31.10.16 - 11:23 | (0) советую почитать учебник математики за 5-й (если не ошибаюсь) класс | ||
Дарлок 150 - 31.10.16 - 11:35 | (148) человек пришел с домыслами, и считает, что ему обязаны возражать аргументами?
вот уж воистину "один дурак напишет столько вопросов, что и 100 мудрецов не ответят"... на женщину судя по фото ты не похож, гуманитарий не лез бы с особо ценным мнением, ибо их первым делом учат, что их мнение абсолютно никому не интересно..., а вот южные наши браться всегда отличались особым подходам к торговле и математике =), а самое главное вольной её трактовкой. | ||
MrStomak 151 - 31.10.16 - 11:49 | (150)
Да, в дискуссии обычно используют аргументы. Даже домысел отвечают аргументами - так, мол и так, данное утверждение неверно. Ну это не в твоей деревне, конечно, извини что заподозрил в тебе способность вести дискуссии. Ты на утверждение, что сначала нужно умножать, а потом делить, сначала ответил полным недоумением, а через полчаса, продемонстрировав способности Ртути, уже ответственно пишешь - "Да, так и надо, я всё знаю". Согласен с тем, что ждать от такого умельца дискуссии излишне самонадеянно. Судя по твоей фиксации на юге, ты, видимо, оттуда. Ну или кто-то из южных братьев нанес тебе тяжелую психологическую травму. Ты должен принять это и жизнь дальше, дружище, не фиксируйся так. Того, что произошло, в любом случае не изменишь. Попробуй полюбившийся с детства метод релаксации - открой инженерный калькулятор и повбивай циферки. Главное, не ставь на своём компе каких-либо средств программирования - мир и без твоих программ гадкое место. | ||
Pahomich 152 - 31.10.16 - 11:51 | (137) Это услуга платная... | ||
Дарлок 153 - 31.10.16 - 13:48 | (151) чувак... ты через чур зациклен на себе и с тобой никто дискуссию вести изначально не собирался. Чисто поржать над еще 1С-специалистом и ничего личного. | ||
MrStomak 154 - 31.10.16 - 14:14 | (153)
А, понятно. Переживаешь по поводу сертификата. Ты не сдавайся, работай над собой, и у тебя обязательно все получится. | ||
newbling 155 - 31.10.16 - 14:20 | Кстати, напомнило логику моего школьного учителя информатики - где он долго-долго описывал какой-то алгоритм и его прелести относительно более простого алгоритма и что он должен быть в 3 раза быстрее, а на машинах у всех получалось в районе 1.3 или 1.4 раза быстрее.
На наш закономерный вопрос "а где же 3" он сказал: "1.3 очень близко к 1.5. 1.5 округляется до 2, а от 2 до 3 рукой подать". | ||
aleks_default 156 - 31.10.16 - 14:44 | (154) кстати, почему SQL результат деления с числом в периоде после запятой обрезает до 6 знаков, а не до 28 или хотя бы до 10(как в 1с)? | ||
Катя2504 157 - 31.10.16 - 15:04 | Иногда от чтения тем на мисте волосы встают дыбом... | ||
Дарлок 158 - 31.10.16 - 15:18 | |||
MrStomak 159 - 31.10.16 - 15:24 | (156)
Это описанное в документации поведение: https://technet.microsoft.com/en-us/library/ms190476.aspx max(6, s1 + p2 + 1) | ||
Дарлок 160 - 31.10.16 - 15:28 | (154) ан-нет пересчитал, был не прав. одинаково =) а вот у жены моей поболее будет. ;)
можем их вместо сложить в костер... пламя знатное получится. Рекламное место пустует | ||
aleks_default 161 - 31.10.16 - 15:29 | (159)Т.е. настройки скуля тут нипричем? Спасибо. | ||
MrStomak 162 - 31.10.16 - 15:32 | (160) Старенький уже, а все сертификатики там высчитываешь, жену там зачем-то притащил. Угомонился бы уже - никому твои профы по бух 7.7 неинтересны. | ||
Дарлок 163 - 31.10.16 - 15:34 | (162) профы мусор, чего их считать, то =) | ||
Злопчинский 164 - 31.10.16 - 17:55 | (151) для релаксации еще весьма способствует наблюдение за процессом дефрагментации когда квадратики бегают! | ||
newbling 165 - 31.10.16 - 17:57 | (164) Да, наглядно видна кропотливая работа, которая из хаоса строит подобие порядка. |
◄ 1 2 |
Список тем форума
|