LINUX.ORG.RU

Округление чисел (для реальных процессов)

 , , , ,


0

4

Хочу познакомить местный народ со своим методом округления чисел.

Я его разработал в давние времена, когда изучал и разрабатывал всякие методы обработки аудио и видео информации перед поступлением в институт.

Суть округления в том, что точка отсчёта для округления плавает в зависимости от соотношения к числам к которым нужно округлять.

Для понимания простая формулировка:

Если X - число которое нужно округлить, а Y и Y1 - числа между которыми стоит число X, причём Y<Y1 (по модулю), то правило будет примерно таким:

Если Y/X < X/Y1 (по модулю) - округлять в сторону Y1, если наоборот, то в сторону Y.

Но тут есть пару нюансов конечно. Например условие Y/X = X/Y1, в этом случае предлагаю применить дополнение из системы классического округления (в большую сторону). А вот когда выбор округления между нолём и другим числом, тут как обычно выползает неадекватная ерунда (я тут пока не особо точные методы придумал)

Что хочу узнать. Есть ли подобные разработки, их применение где-то и решены ли вопросы с нолём.

Округление чисел
Я его разработал

Это уже ну вершина NIH-Синдрома. Доктор прописывает Вам срочно принять три кубика Эвтаназепам-Форте внутречерепно.

Суть округления в том, что точка отсчёта для округления плавает в зависимости от соотношения к числам к которым нужно округлять.

что за херню ты несёшь?

UPD. И что делает этот бред в «S&E»?

Deleted ()
Последнее исправление: nepank (всего исправлений: 1)
Ответ на: комментарий от Deleted

Если интересно - могу объяснить суть.

Если не понимаешь сути перевода например 32 битного звука в 8 битный при той же дискретизации, тоже могу объяснить.

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

Если не понимаешь сути перевода например 32 битного звука в 8 битный

Суть перевода 32-битного звука в 8-битный состоит в том, что его не должно быть.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

В большинстве случаев из 32 бит он переводится в 16, чтобы ты мог слушать это на своей технике.

Serg_HIS ()
Ответ на: комментарий от Deleted

Это уже ну вершина NIH-Синдрома

Да к стати... Видать это ты про себя. Самокритично однако.

Serg_HIS ()
Ответ на: комментарий от Deleted

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

И не только.

Наверное тебе нужно много чего ещё изучить, и не только по арифметике, перед тем как лезть в этот тред.

Serg_HIS ()

не ясны искомая цель и достигаемый твоим методом результат

PtiCa ★★★★★ ()
Ответ на: комментарий от Serg_HIS

И почему не достаточно тупо ужать амплитуду в X раз и перевести в нужный тип чтобы она влезла в Y бит?

deep-purple ★★★★★ ()

Округление чисел... когда изучал и разрабатывал всякие методы обработки аудио и видео информации

Округление «нинужно», ежели изначально всё считать в целых «нанопопугаях» © :)

quickquest ★★★★★ ()
Ответ на: комментарий от PtiCa

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

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

Получается что например (образно) кирпич массой 1,4 кг гораздо более «похож» и по массе и по размерам и по разрушительным действиям (если его куда-то бросить :) ) на 2 кг кирпич, чем на 1 кг.

Получается более естественным на ощупь, на взгляд по пропорциям и даже логически, что 1,4 - это скорее 2 чем 1.

Конечно если отображение и хранение результатов вычислений производится с той же точностью что позволяет «вычислятор» - то округления такого рода становятся бессмысленными.

Serg_HIS ()
Ответ на: комментарий от deep-purple

И почему не достаточно тупо ужать амплитуду

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

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

Это весело. А кирпич весом 2.4 кг - похож на 2 или на 3? А если 2.5? :)

Посчитал. 2.4 похож на 2, а 2.5 похож на 3 :)

PtiCa ★★★★★ ()
Последнее исправление: PtiCa (всего исправлений: 1)
Ответ на: комментарий от PtiCa

А кирпич весом 2.4 кг - похож на

Я описал формулы достаточно точно, можешь вычислить :)

Serg_HIS ()
Ответ на: комментарий от PtiCa

Посчитал.

Я эту систему округлений разработал именно для вычислений внутри системы распознавания. Потому и применил слово «похожесть».

Serg_HIS ()

А вот когда выбор округления между нолём и другим числом, тут как обычно выползает неадекватная ерунда (я тут пока не особо точные методы придумал)

да, факт. Тут надо отталкиваться от того, какое значение ты допускаешь что бы оно считалось нулем. Т.е. абсолютное, а не относительное. Такая же петрушка, что и при сравнении floating-point: с нулем всегда сравниваешь с абсолютной точностью. Боюсь, ничего тут не придумать. Задавай нужную тебе абсолютную погрешность, и всё.

PtiCa ★★★★★ ()
Ответ на: комментарий от PtiCa

Задавай нужную тебе абсолютную погрешность, и всё

Я к такому выводу и пришёл.

Хотя как вариант хочу испробовать в этом месте ввести стандартное правило округления.

Serg_HIS ()

Поздравляю, ты изобрел логарифмическую метрику. А нет, извини, оказалось что это сделали до тебя 200 лет назад.

morse ★★★★★ ()
Ответ на: комментарий от morse

ты изобрел логарифмическую метрику

Ждал кто-же вспомнит!

Но тут как бы не совсем так. Логарифмическая метрика включается только в момент округления и только для округления.

В логарифмической метрике насколько помню в самой применяется обычные методы округления.

Serg_HIS ()

числа с плавающей точкой на мантиссе делают именно это, если я правильно понял твою идею.

VladimirMalyk ★★★★★ ()
Ответ на: комментарий от VladimirMalyk

Нет. Хотя числа с плавающей точкой тот ещё подарок в реализации в компах.

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

Serg_HIS ()
Ответ на: комментарий от VladimirMalyk

Что бы было понятнее:

Если у тебя хранится double, то мой метод предполагает вариант перевода во float с меньшими отклонениями чем при простом округлении.

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

какие ты берёшь критерии для «меньшими отклонениями» когда округляешь значение дабла до точности флоата?

VladimirMalyk ★★★★★ ()
Ответ на: комментарий от VladimirMalyk

Самый главный критерий тут - это что именно описывает значение.

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

Если некое астральное измерение широты души сферического коня в вакууме или просто идёт какое-то баловство с математикой типа деления на ноль/бесконечность, то тут наверное не стоит пользоваться таким методом округления.

Или ты о чём?

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

величины, которые считается корректным измерять друг относительно друга

я правильно понимаю, что это одна и та же величина, но с различной точностью?

VladimirMalyk ★★★★★ ()
Ответ на: комментарий от VladimirMalyk

я правильно понимаю, что это одна и та же величина, но с различной точностью?

Да.

Serg_HIS ()
Ответ на: комментарий от VladimirMalyk

Грубо говоря у нас есть метод хранения с точностью «1»

А есть метод где хранится с точностью «0.1».

Есть к примеру таблица с данными о весе человекоф.

И нам нужно перевести эти велечины в хранилище с меньшей точностью.

Ну например медицинские карты для дозировки лекарств врачом в зависимости от веса. Чтобы и более эффективно отработало и меньше вреда принесло (какие нибудь антибиотики).

Не пришло сейчас ничего быстро в голову для примера...

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

это вопрос «что делать с остатком», такого много.

супермаркеты, например, отбрасывают копейки в пользу покупателя, чтобы не возиться с мелочью.

или вот https://geektimes.ru/post/275914/

VladimirMalyk ★★★★★ ()
Ответ на: комментарий от VladimirMalyk

или вот https://geektimes.ru/post/275914/

Очень странная у них конвертация и к тому же без минимальной суммы и процента за операцию...

У меня бы такое не прошло, если бы я был у них программером. Или попросил бы официальный приказ о том, что так нужно cделать и подписью о своём (того кто приказал) полном несении ответственности или просто сказал бы что делать не буду.

Я сам как-то работал в конторе по разработке систем для финансовых операций.

Ох там и злились когда я находил бреши такого вида ещё на этапе обсуждения. А я считал их как минимум «неадекватными», когда мне приходилось это несколько раз объяснять (и не только это).

Хорошо что я больше не с ними.

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

возня с остатком такое, тут каждый поступает как ему будет удобно. я бы не сказал, что тут может быть какая-то универсальная методология «округления» — с остатком следует поступать как того требует предметная область да и всё.

VladimirMalyk ★★★★★ ()
Последнее исправление: VladimirMalyk (всего исправлений: 1)
Ответ на: комментарий от Serg_HIS

к более реалистичной физической модели

рукалицо.жпг

i-rinat ★★★★★ ()
Ответ на: комментарий от VladimirMalyk

что кроме?

Алгоритмическая предподготовка к финансовой операции.

Для начала определится по минимальным суммам для операций по каждой из валют.

Не давать возможность перечислять сумму меньше минимальной по курсу в перечисляемую валюту. Если 1 цент - это 65 копеек, то меньшую/не кратную сумму ты просто не должен смочь переслать/конвертировать.

Если в добавок брать за операцию комиссию, то всё.

Всегда было занимательно смотреть фильмы про украденные деньги набежавшие с округлений в банковских операциях.

Если про тот банк не фейк, что они такие класные бизнесмены - то нет слов кроме поржать.

Serg_HIS ()

метод кривой. тут проблема шире, чем только в случае с нулем в Y

если Y=100, Y1=200 - это одно. если Y=100100, Y1=100200, это совсем другая картина. Y=0, Y1=100 - просто экстремальный случай

можно сместить все переменные так, чтобы Y = Y1 / 2, округлить твоим методом, и затем вернуть обратно, на то же смещение. тогда будет более стабильно

MyTrooName ★★★★★ ()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

метод кривой. тут проблема шире, чем только в случае с нулем в Y

В чём собственно кривизна?

Serg_HIS ()
Ответ на: комментарий от MyTrooName

написал же

Ну какие-то слова написаны, но нет разъяснений в чём конкретно кривизна.

- это одно

Что конкретно одно?

это совсем другая картина

Какая картина? В чём суть?

просто экстремальный случай

Это не просто экстримальный, а место где ХЗ что делать

можно сместить все переменные так, чтобы

Что смещать? Куда? Зачем?

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

Ну какие-то слова написаны, но нет разъяснений в чём конкретно кривизна

нарисуй один график для Y,Y1=100,200 и один для Y,Y1=100100,100200

и сравни

MyTrooName ★★★★★ ()
Ответ на: комментарий от Serg_HIS

Что смещать? Куда? Зачем?

offset=magic_formula(y,y1)
y-=offset
y1-=offset
assert(y*2 == y1)
x-=offset

result=do_your_rounding(x,y,y1)

y+=offset
y1+=offset
x+=offset
result+=offset
MyTrooName ★★★★★ ()
Последнее исправление: MyTrooName (всего исправлений: 1)

Для «округления чисел в реальных процессах» небось регуляризацию используют, чтобы меньше зависеть от неточности входных данных

dave ★★★★★ ()
Ответ на: комментарий от Serg_HIS

Чувствуется «опыт». И отсутствие опыта. Зато самомнение зашкаливающее просто.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Завидно что у тебя нет опыта и своих наработок, а у меня есть и наработки и опыт?

Тебе к психиатру прямая дорога.

Отпускаю тебя с миром.

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

Завидно что у тебя нет опыта и своих наработок, а у меня есть и наработки и опыт?

Было бы чему завидовать. Это вот эту тему ты считаешь наработкой? Тебе уже и на прорехи указали, и на prior art. Но ты даже не удосужился этот prior art просмотреть, чтобы хоть как-то свои прорехи заткнуть.

А теперь ещё и отвергаешь регуляризацию данных. Это уже совсем грустно. Я бы тебе посоветовал приумерить бахвальство. Ты не за пивком байки травишь. Тут же видно, что хоть гонору у тебя много, в теме ты плаваешь, а выезжать пытаешься на понтах. Мол, а это я вам домашним заданием оставляю. Хоть бы матчасть подучил, перед тем как тему создавать.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Где конкретно прорехи?

Ты видать не удосужился просто понять/прочитать смысл метода и для чего его применять, несёшь чушь.

Если не тупой - перечитай ветку ещё раз.

Ну а теперь покойся с миром, но к психиатру сходи.

Вот же хамло безграмотное понабигает...

Serg_HIS ()

Мне кажется, что тебе пора читать про интерполяции и сплайны. Это будет гораздо лучшее и более похоже на правду. Идея такая: ты размещаешь свои точки на координатной плоскости, где по оси y значения, а по оси x - время, всё это ты делаешь в одной сетке. сглаживаешь график (если это имеет физический смысл) на свой вкус и опыт, а так же учитываешь временные характеристики алгоритма, если тебе важна скорость его работы. Гуглить для этого надо в сторону сплайнов и интерполяций, создаешь новую более убогую или более подробную (хотя в этом не так много смысла, но он может быть) сетку, пишешь ты скажем узлы новой сетки, а для выбора их выбираешь самые ближайшие к твоему графику. Если график проходит точно по середине, выбираешь случайную точку или как договоришься. Получишь некоторые приближенные точки в своей задаче, которые, возможно, в целом будут лучше отображать физический процесс, чем тупое округление.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

Ты тоже наверное не понял сути. Хотя может просто не прочитал разъяснения ниже по теме (тоесть тред не читал :)).

Serg_HIS ()
Ответ на: комментарий от Serg_HIS

Тред не читал. Ты бы кодец накидал (на каком-нибудь питоне с numpy и matplotlib для визуализации это каких-то 50 строчек кода максимум, пишется за 10 минут, если совсем ничего не знаешь, то за 20) или картинку выложил, что у тебя происходит на самом деле. Так твои неформальные рассуждения очень тяжело понимать.

peregrine ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)