![]() |
|
![]() ![]() ![]() |
|
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Вот только что промоделировал на случайном массиве из 64к элементов в пределах unsigned long.
Если вычисления проводить в double - ну более-менее, хотя один расчёт из двадцати дал ошибку на единицу (102201990, расчётно 102201989). Счас попробую в single (он, как и ulong, 4 байта)... боюсь, будет грустно. Это сообщение отредактировал(а) Akina - 1.3.2013, 09:11 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Один расчёт из 10 дал ошибку - 17123904, расчётно 17123903...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
думаю, лучше считать вместо произведения сумму квадратов - ошибки меньше будут
-------------------- qqq |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
1*1+8*8=4*4+7*7=65 аналогично с кубами 1*1*1+12*12*12=9*9*9+10*10*10=1729 То же и с остальными степенями... не пойдёть. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
то, что квадраты требуют больше места, чем числа - ожидаемо просто, если среди чисел нет уж очень большого неравенства (типа, одно огромное, а остальные маленькие), то в случае с квадратами результирующее число будет меньше понятно, что это уже использует какие-то предположения о числах... -------------------- qqq |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
о...
если предположить, что в дополнительных переменных у нас достаточно бит для хранения любого числа из массива, то можно найти числа по половинкам: 1. сначала рассматриваем младшую половину бит каждого элемента, считаем для них суммы и суммы квадратов - всё поместится, находим пару младших половинок 2. то же самое для старших - находим пару старших половинок чтобы понять, какую младшую половинку соединить с како старшей, просто пробуем оба варианта, проверяем, какой подходит -------------------- qqq |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 2 Всего: 85 |
а точнее, переменная P Должна быть в 2 раза длиннее чем типы массива. переменная S Должна иметь на 1 бит больше чем типы массива. Тогда решаецца строго, для любых данных. (при аккуратном программировании). double не подойдет для 32 разрядов, так как там 56 бит (если не ошибаюсь.) а нужно 64 битов мантисы. float тем более. long double в gcc, должен подойти. long double у M$ не пойдёт. Ну или делать как предлагает maxim1000, длинную арифметику вручную. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |