Обновить
180
0.3

Человек

Отправить сообщение
К сожалению, при попытке компиляции появляются ошибки,
например:
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp: In static member function 'static std::unique_ptr<ROADdecoder::Driver::IDataReadDriver> ROADdecoder::Driver::DataDriver::getIDataReadDriver(std::shared_ptr<unsigned char>&, PlatformDependencies::ROADUInt32, Endian::EndianType)':
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp:12:90: error: 'std::unique_ptr<Endian::IEndianConvertor>' is an inaccessible base of 'PlatformDependencies::Unique_ptr<Endian::IEndianConvertor>'
std::unique_ptr<IDataReadDriver> result(new DataReadDriver(aData, aLength, lconvertor));
^
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp: In static member function 'static std::unique_ptr<ROADdecoder::Driver::IDataReadDriver> ROADdecoder::Driver::DataDriver::getIDataReadDriver(ROADdecoder::Driver::DataContainer*, PlatformDependencies::ROADUInt32, Endian::EndianType)':
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp:23:90: error: 'std::unique_ptr<Endian::IEndianConvertor>' is an inaccessible base of 'PlatformDependencies::Unique_ptr<Endian::IEndianConvertor>'
std::unique_ptr<IDataReadDriver> result(new DataReadDriver(aData, aLength, lconvertor));

Я что-то не так делаю?
Почему вы не хотите выложить исполняемый файл(ы)?
В ваших рассуждениях имеются следующие ошибки:

1. сумма 0.6000006 и 0.03339874 — формата float недостаточно для вычислений с данной точностью.
2. умножение 0.06543455 на 139 — аналогично, при умножении необходимо иметь удвоенное количество разрядов для хранения результата.
3. деление 131 на 0.066 аналогично предыдущему. 1/0.066=15.151515...=15.(15) имеет бесконечное количество значащих цифр.
4. вычитание 105.3256 и 105.32 — здесь точности уже достаточно, и для получения корректного результата достаточно округлить результат до 4 цифр после запятой. Округление необходимо для отбрасывания погрешности, внесённой при преобразовании из 10-ого представления числа в двоичное. Продемонстрировать это можно, например, так:

float round(float v, float digits)
{
	float scale=pow(10,digits);
	return floor((v*scale+0.5f))/scale;
}

int _tmain(int argc, _TCHAR* argv[])
{
	cout.precision(7);
	cout << round(105.3256f-105.32f, 4.f) << endl;
	return 0;
}

Вообще, для проверки ваших математических выкладок я бы рекомендовал Вам использовать не Excel или калькулятор, а системы компьютерной алгебры. Например, в Wolfram Mathematica можно явно задавать точность чисел с плавающей точкой для обеспечения корректного результата:

In[1]:= 105.3256`7 - 105.32`7
Out[1]= 0.0056

In[2]:= 131/0.066`7
Out[2]= 1984.848
В ваших статьях я не нашёл строгого математического доказательства этому.
Хотите точные операции с дробями — используйте fixed point арифметику.

Для точных рациональных вычислений нужно использовать специальные средства, например, класс «ratio» в c++, который хранит отдельно числитель и знаменатель в целочисленном виде.
Нет вопросов к социальному статусу автора.
Нет фатальной ошибки в том, что формат с ограниченной точностью имеет ограниченную точность.
Если вы хотите убедить, что в реализации IEEE754 есть ошибки — то надо не сюда писать, а в комитет по стандартизации.
Если вы изобрели новую, улучшенную технологию обработки чисел с плавающей точкой — то её надо срочно патентовать, пока этого не сделал кто-то другой.
Если вы боитесь, что «такой неожиданный результат из придуманных нами, случайно не выскочит при контроле, например, за ядерной установкой», то в любом случае уже поздно что-то менять — в современных процессорах стандарт реализован аппаратно.
Прольёт свет на контекст.
Раз об этом зашла речь, а к чему вы, собственно, близки? Если вы далеки от бухгалтерии, математики и программирования, но при этом испытываете потребность решать фундаментальные ограничения чисел с плавающей точкой.
Если же все, что написано в статье, давно всем известно, то дайте ссылку, где эта проблема освещена

Первая же ссылка в google на запрос «floating point issues»:
What Every Computer Scientist Should Know About Floating-Point Arithmetic
Есть ли уже скомпилированный кодер? В вашем проекте я не нашёл консольной версии, только под Qt.
Сжатие в данном случае не совсем корректный термин. В алгоритме отсутствует сама концепция сжатия — удаления избыточности.

Я вижу противоречие. Разве у вас в заголовке не написано — «Новый Алгоритм Сжатия»? Алгоритм сжатия без концепции сжатия?
Совершенно не похоже. В осциллограмме одному значению времени соответствует только одно значение амплитуды, в то время как в кривой Коха это не так:
Я думаю, что вы согласитесь, что во временной области аудио данные в пределах 4 семплов изменяются медленно

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

Эффект Гиббса же я упомянул прямо с противоположной целью — как искажение, которое хорошо видно графически (в jpeg) и практически не слышно в звуке — mp3.
Голливуд для кого фильмы снимает?

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

В реальной жизни самопожертвование возникает в намного менее прозаичных условиях — на войне или опасном производстве. Или когда мать голодает ради того, чтобы её ребёнок мог поесть. Но в таких случаях людьми движет вовсе не желание геройства, а чувство долга.
В такой формулировке возникает конфликт интересов — стремиться убить врага или позволить ему убить себя? Допустим, можно и убить, и умереть — но если враг только один. А если несколько? А если у тебя семья, своей смертью ты и её в жертву приносишь. А приносить в жертву других — это уже не геройство. Опять конфликт интересов.
Извините, я не совсем понял. Вы делаете сжатие во временной области или частотной? Если временной, тогда искажения, вносимые алгоритмом, будут иметь намного более разрушительный характер. Ведь природа звука, как и механизм его восприятия, принципиально отличается от графики — ведь мы воспринимаем не мгновенные значения амплитуд как таковые, а спектральную составляющую звука (в сильно упрощённой интерпретации).

А поскольку ваш алгоритм с потерями, характер вносимых искажений намного более важен, чем время работы или степень сжатия. То, что не видно на картинке, будет ясно слышно в звуке, и наоборот — пример чего, например, является эффект Гиббса.
Не совсем понятно, какой вид самопожертвования вы имеете ввиду:
1. жертвовать собой ради других,
2. другие жертвуют собой ради Вас?
Выглядит ещё менее убедительно. Если честно, выглядит так, как будто вы эту формулу взяли просто из головы. Как минимум потому, что в ней отсутствует количество суммируемых элементов. Кроме того из неё следует, что если для хранения накапливаемой погрешности вместо double взять long double, это приведёт к экспоненциальному росту точности. Что сомнительно. Ведь вычисления производятся по-прежнему в оригинальном формате.
Мы, как люди будущего, уже знаем ответ — героизм будет проявляться в борьбе с системой. «1984», «О дивный новый мир», «Матрица» и прочие наглядно демонстрируют, как вектор фантастики изменился с постройки идеального будущего на разрушение чрезмерно идеального будущего.
А вы можете обосновать, что точность увеличивается именно в 2 раза, а не, скажем, в полтора? Откуда вообще взялась эта цифра? Ни в русской, ни в английской википедии её нет.

Информация

В рейтинге
2 366-й
Откуда
Россия
Работает в
Зарегистрирован
Активность