pargentum: (Morda)
[personal profile] pargentum
Мне вспомнилась замечательная академовская байка, как кроносисты пришли на экономфак НГУ продавать им свое великое изобретение.
А те им сказали: выпей из дуршлагаа сложите-ка два миллиарда рублей с тремя миллиардами рублей с точностью до копеек.
И кроносисты, как гласит байка, именно тогда впервые осознали величие двоично-десятичной арифметики.  Но переделывать процессор сил уже не было.

Update: Вот Кронос мне точно гораздо сильнее жалко, чем Электроники-60 и 1801ВМ1. Все-таки это была действительно самобытная разработка, и при этом вписанная в мировой процесс развития - её, как-никак, сам Вирт приезжал одобрять. Но с высоты сегодняшнего знания описать это иначе как "детский сад, штаны на лямках" у меня, извините, не получается. Или, как там у "Крематория" - "грязный подвал и на стенах женщины, отчизна которых туземный атолл. Сомнительный звук, но в каждом аккорде слепая вера в рок-н-ролл".

Date: 2014-02-17 11:02 am (UTC)
From: [identity profile] znour.livejournal.com
Не понимаю, а в чем проблема-то была? Что такое не умел кронос, чтобы сложить два числа?

Date: 2014-02-17 11:05 am (UTC)
From: [identity profile] pargentum.livejournal.com
Диапазон представления 32-битных двоичных чисел вам напомнить или сами на калькуляторе посчитаете?

Date: 2014-02-17 11:17 am (UTC)
From: [identity profile] znour.livejournal.com
А в чем ваще проблема считать любую разрядность на любой меньшей разрядности? Я легко вам посчитаю сумму хоть 128к бит числа на 8битном компьютере.

Date: 2014-02-17 11:20 am (UTC)
From: [identity profile] pargentum.livejournal.com
Если есть флаг двоичного переноса - никакой проблемы. А вот если его нету - ...
ЗЫ надо полистать руководство по системе команд Кроноса, у меня жена его несколько раз порывалась выкинуть, но я героически отстоял. Но с битом переноса и реализацией на его основе длинной арифметики там все было как-то не очень просто.

Date: 2014-02-17 11:21 am (UTC)
From: [identity profile] znour.livejournal.com
УПД. Вот я работаю в том числе с 1с 8.2, она считает с точностью 64 десятичных знака не теряя точности. Это что-то около 214 бит двоичного представления. на 32битных процессорах!

UPD2. А флаг переноса они не могли забыть даже в принципе. Это база двоичной логики.

Date: 2014-02-17 11:21 am (UTC)
From: [identity profile] pargentum.livejournal.com
ЗЗЫ вот чего там точно не было - это 64-битного типа инт в Модуле.
То есть даже если такое и можно было сделать на ассемблере, то основной язык программирования это точно не умел.

Date: 2014-02-17 11:22 am (UTC)
From: [identity profile] znour.livejournal.com
Делаем расширение езыга, и снова нет никаких проблем. Все езыги развиваются со временем.

Date: 2014-02-17 11:26 am (UTC)
From: [identity profile] pargentum.livejournal.com
У тех Кроносов, с которыми я имел дело, такого расширения езыга почему-то не было. Это я точно могу сказать, и это все, что я по данному вопросу знаю из первых рук.

Date: 2014-02-17 11:32 am (UTC)
From: [identity profile] pargentum.livejournal.com
Ну вот вам описание процессора с реализацией всех команд на Модуле: http://kronos.ru/documentation/ar

Найдите там что-нибудь, на чем можно сделать бит переноса. Я с ходу не нашел. Переполнение есть, переноса нетути.

Обратите также внимание, что там вообще нет арифметических флагов в том смысле, в каком они есть у PDP-11 или интела. Там омега-признак, как у БЭСМ-6. Много команд сравнения и одна команда условного перехода.

Date: 2014-02-17 11:45 am (UTC)
From: [identity profile] kouzdra.livejournal.com
Ну дык для вас классическая бухгалтерская задачка - есть табличка с раскладкой по строкам столбцам.

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

Надо округлить так, чтобы сошлись "итого" и в строчках и в столбцах (ну и совсем итоговое итого тоже).

Не очень кстати простая.

Date: 2014-02-17 11:49 am (UTC)
From: [identity profile] pargentum.livejournal.com
В двоично-десятичной арифметике как раз абсолютно ничего сложного. Потому что можно округлить одни только итого.

Date: 2014-02-17 11:54 am (UTC)
From: [identity profile] kouzdra.livejournal.com
А причем тут "двоично десятичная" - цифирки-то там возникаю из "налоговых" 15% от 1233453252 рублей. Кои с произвольной разрядностью в любой системе.

Но я в общем понял - с бухгалтерией вы тоже не сталкивались.

Date: 2014-02-17 11:58 am (UTC)
From: [identity profile] pargentum.livejournal.com
Если чо, двоично-десятичная арифметика вполне себе допускает числа с фиксированной точкой практически неограниченной точности. Поэтому как может получиться дробное число копеек я прекрасно понимаю, и никакой отдельной проблемы это не создает. Если вы про это.

Date: 2014-02-17 12:05 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Я вам про конкретную и очень известную реальную задачку - у вас есть матрица. Вам ее надо округлить до копеек так чтобы контрольные цифры "сошлись" по обоим измерениям (требование понятное - потому как на "округлении до копеечки" только ленивый не ворует).

Двоичность с десятичностью тут вообще мимо темы (что вы ее упоманаете упорно грит только о том что вы вообще не понимаете про что вам говорят)

Date: 2014-02-17 01:29 pm (UTC)
From: [identity profile] pargentum.livejournal.com
Ваша исходная задача была про округлить итого, а не саму матрицу.

Date: 2014-02-17 01:57 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Слушайте - ну либо не придуривайтесь - задачка известная очень, либо сознайтесь что ни хера вы даже в бухгалтерском программировании не пониматете. Я лично склонен считать что второе.

Date: 2014-02-17 01:59 pm (UTC)
From: [identity profile] pargentum.livejournal.com
Слушайте, укажите пожалуйста в вашей формулировке задачи фразу, из которой следует, что округлять нужно саму матрицу.

Задача известная в обоих формулировках.

Date: 2014-02-17 02:00 pm (UTC)
From: [identity profile] pargentum.livejournal.com
Кстати, да, в одном вы правы. Бухгалтерией я ни разу всерьез не занимался. Все как-то поинтереснее задачки находились.

Date: 2014-02-17 02:05 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Я в общем-то исходил из того что человеку при вопросе 2x2 = 4 не надо объснять что это значит.

PS: Кроноса мне кстати как раз ни разу не жалко - такой же провинциальный (а скорее больший даже) онанизм как и всякие ЛГУ-самсоны. Попрограммировать всякую х-ню под них забавно было конечно - но общая перспектива тут как раз была ясна.
Edited Date: 2014-02-17 02:07 pm (UTC)

Date: 2014-02-17 02:09 pm (UTC)
From: [identity profile] pargentum.livejournal.com
Я еще раз повторяю свою просьбу: укажите, какую из фраз вашей формулировки следует понимать как требование округлять именно матрицу.

Date: 2014-02-17 02:48 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Ну поучитесь хотя бы дурочку-то валять убедительно.

Date: 2014-02-17 04:40 pm (UTC)
From: [identity profile] pargentum.livejournal.com
Эту просьбу вполне можно обратить и к вам.

Date: 2014-02-17 07:10 pm (UTC)
From: [identity profile] os80.livejournal.com
Вот меня поражает, что ни один мудак типа Кормена этот алгоритм не разбирает (интересно - как с этим у Кнута?).
Сколько ж я в своё время протрахался с ней, с задачкой этой...
И, ЧСХ, решение-то простенькое.
Edited Date: 2014-02-17 07:23 pm (UTC)

Date: 2014-02-17 07:13 pm (UTC)
From: [identity profile] os80.livejournal.com
Проблему создаёт тот факт, что округлённая сумма величин не обязательно равна сумме округлённых величин :-)

Date: 2014-02-17 07:18 pm (UTC)
From: [identity profile] os80.livejournal.com
Хотя я никак не могу понять, почему никто не использует суммовую разницу вместо вот этого онанизма.
При создании этих строчек вручную - ещё мог бы, а когда машина вкалывает - какая, казалось бы, разница, кроме большей понятности?

Date: 2014-02-18 12:33 am (UTC)
From: [identity profile] pargentum.livejournal.com
Если задача округлить матрицу, то да, проблема в этом. Но из исходной формулировки задачи это не следует. :)

Date: 2014-02-18 03:31 am (UTC)
From: [identity profile] fat-yankey.livejournal.com
Отсутствие бита переноса замедляет вычисления. И только. В конце концов реализации BigInteger на самых разных языках высокого уровня вообще бит переноса не используют.

Date: 2014-02-18 04:04 am (UTC)
From: [identity profile] pargentum.livejournal.com
Ну, можно вообще всю арифметику на сдвигах и битовой логике сделать (внутре процессора она почти так и сделана). И это тоже только замедлит вычисления.
Двоично-десятичную логику, кстати, таким образом сделать еще проще.

Profile

pargentum: (Default)
pargentum

December 2025

S M T W T F S
  1 2 3 4 56
78 9 1011 1213
14 1516 17 18 19 20
21 22 23 24 25 26 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 10:09 am
Powered by Dreamwidth Studios