Re[2]: Попинайте арифметику
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.06.14 17:05
Оценка:
Здравствуйте, watchmaker, Вы писали:

M>> Понадобилось тут немного арифметики, решил сам наваять,


W>Понадобилось? Зачем? Почему не подошло готовое?


Искать дольше

M>> дело вообщем-то нехитрое

W>Ну и раз нехитрое, то что же код деления не привёл тогда? )

Типа подколол?
Там конечно несколько хитрее Пока не нужно, и возможно вообще не понадобится, не стал разбираться.

W>Ну, видимо невнимательно прочитал ту тему. Вот например:

Внимательно. Те компиляторы, которые я использую, все делают как нужно. Пока это устраивает.


W>
M>>template<> bool integer_addition<INT16> (INT16  a, INT16  b, INT16  *c) { return signed_addition( a, b, c ); }
W>

W>Кошмар. Шаблоны нужны чтобы избавиться от копипасты, а не чтобы сделать её в несколько раз больше. Ну вот зачем тебе тут специализация? Зачем вообще вызвать нешаблонные unsigned_addition из шаблонных integer_addition?
W>Я ещё понимаю, если бы ты разделял код для знаковых и беззнаковых типов (но даже для этого специализация не нужна), но вот это дублирование для всех размеров совсем ужасно.

Так разделяю как раз. Хотя эта копипаста самому не очень нравится, потом подумаю, как переделать

W>
M>>template<typename IntT>
M>>IntT integer_abs( IntT i )  { return (i<0) ? -i : /*return*/ i; }
W>
Эта функция у тебя иногда возвращает отрицательный результат вследствие переполнения на минимальном целом.


Это как?


Кстати, есть похоже ошибка — вычитание через сложение неправильно делать, заем возможно будет неправильно определен.
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.