|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
|
24-х битная математика.29.01.2014, 15:59. Показов 18119. Ответов 38
Метки нет (Все метки)
Собственно сабж.
В стандартном avr-gcc нет 24-хбитных типов, что вызывает у меня печальку. Наверняка их можно как-нибудь дописать. Возможно ли доопределить их на голом си, или потребуется лезть в ассемблер? В общем, что для этого требуется?, или, возможно, есть готовые реализации?.
0
|
|
| 29.01.2014, 15:59 | |
|
Ответы с готовыми решениями:
38
64-х битная система думает, что она 32-х битная Дискретная математика - ложная наука. Математика должна быть радикально изменена 64 битная архитектура |
|
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
|
||
| 29.01.2014, 20:57 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 24.12.2010
Сообщений: 279
|
|
| 29.01.2014, 23:38 | |
|
Дык не одним умножением пользуемся.. А операций с частями чисел меньше..
0
|
|
|
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
|
||
| 30.01.2014, 02:02 | ||
Вот байтовые "части" двух чисел и мы умножаем: "xyz" * "abc" = (x<<16 + y<<8 + z) * (a<<16 + b<<8 + c) = (x*a)<<32 + (x*b+y*a)<<24 + (x*c+y*b+z*a)<<16 + (y*c+z*b)<<8 + z*c Все значки "*", которые мы видим - это реально умножение 8*8. Если добавить 4-й байт во входные числа, то количество умножений возрастет значительно. А у АВР я вижу только аппаратное умножение 8*8. Как бы Си-компилятор не прятал от нас всю эту кухню, в конце концов он сведет все к 9 умножениям 8*8. А для честного 32*32 умножений будет 16, почти вдвое больше. Ну, а еще же нужно для умножения подготовить и после него поскладывать. Честно говоря, я все это не расписывал, когда решил сделать свои mymul24 и mydiv24. Просто интуитивно понимал, что 32*32 это много дольше, чем 24*24 Сейчас, правда, перенес программу на msp430, там мощный аппаратный умножитель принимает 8, 16, 24 (!) и 32 битные операнды. Это позволяет сделать все без таких выкрутасов. Но пока оставил все как есть, надобности в ускорении нет.
0
|
||
|
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
| 30.01.2014, 02:33 | |
|
Вы уж меня простите, но занимаетесь какой-то херней. Частный случай прямо раздули, как нечто грандиозное. А почему, собственно, ограничиваться 24-битной математикой? Давайте разовьем 21-битную, 19-битную, 27-битную.
Все равно, что изобретать новый раздел арифметики на основании известного решения задачи, где получилось полтора землекопа.
0
|
|
|
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
|
||
| 30.01.2014, 03:21 | ||
Автор темы поднял вопрос, оговорившись при том, что "интерес здесь скорее теоретический". Вот и теоретизируем. Спокойно, лениво, без ажиотажа. Никто не говорит, что решаем мировую проблему.
0
|
||
|
0 / 0 / 0
Регистрация: 20.07.2012
Сообщений: 620
|
||
| 30.01.2014, 08:22 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 222
|
||
| 30.01.2014, 10:42 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 30.01.2014, 11:12 | |
|
Кстати, раз уж пошли теоретизировать - нельзя ли оптимизировать вычисления, использовав вместо умножения в столбик метод Карацубы? Или 2 такта на умножение - это слишком мало, чтобы имело смысл уменьшать число умножений, увеличивая число сложений-вычитаний?
0
|
|
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
| 30.01.2014, 13:35 | |
|
Может это спасёт.
https://cloud.mail.ru/public/78a3a52920 ... %D0%B2.pdf
0
|
|
|
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 4
|
||||||
| 30.01.2014, 14:08 | ||||||
|
Как я вижу ситуацию - то поскольку Си не умеет работать с таким типом данных по определению, то все операции придётся прописывать через функции. В C++ поможет переопределение, но делать всё равно нужно. Вот мои "безобразия" на эту тему - вставка в Си проект, где посчитал 32 бита избыточной. но там из-за хранения результата в 64 бита, где можно было обойтись 32 бита, потому как реально значащих было 13 и 19 бит.
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
|||||||
| 30.01.2014, 15:34 | |||||||
А 24 бита на 24 бита => 48 бита за 85 тактов. Вместе с загрузкой агрументов из памяти и с сохранением туда результятов.
0
|
|||||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 30.01.2014, 16:05 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 222
|
|
| 30.01.2014, 16:42 | |
|
miyvir Спасибо за код. Попробую разобрать его, хотя и нифига не понимаю в этих кыржиках.
0
|
|
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
||
| 30.01.2014, 17:10 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 222
|
|
| 04.02.2014, 11:16 | |
|
Здравствуйте. Попробовал перевести на asm код, приведённый miyvir. Не думаю, что до конца проникся методом Кнута, поэтому выкладываю как есть.
Умножение 24*24=48 выполняется за 75 тактов и занимает 65 слов Умножение 32*32=64 выполняется за 134 такта и занимает 117 слов Формат представления чисел старший-младший [1.67 Кб]
0
|
|
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 04.02.2014, 12:45 | |
|
Полезно... Спасибо.
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
|
| 05.02.2014, 01:25 | |
|
Вставлю свои 5 коп. 24-битная арифметика с плавающей точкой. Калькулятор со стековым принципом работы.
Это первая прога написанная мной для МК (мега103). Если чего не так, то извините. Валяется без дела уже 10 лет. Прект завалили :( Может где-либо и кому-либо пригодится. [129.72 Кб]
0
|
|
|
0 / 0 / 0
Регистрация: 01.07.2021
Сообщений: 1
|
|
| 01.07.2021, 15:14 | |
|
Я так и не понял, что помешало автору использовать встроенные типы: __uint24 __int24
0
|
|
|
|
|
| 01.07.2021, 15:45 | |
|
Здесь бесполезно спрашивать. Эту тему
Ищите автора там и спрашивайте у него.
0
|
|
| 01.07.2021, 15:45 | |
|
64 битная не стартует битная обработка 64-х битная арифметика 8-битная музыка
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|