Вводная
Наткнулся я как-то на проблему в одном старом проекте с хранением игровой даты ("спасибо" коду-ровестнику) в миллисекундах. Конечно, с датой 2005 года unsigned long long вполне справлялся, но, а что если разработчику захочется фентези в 3987 году? Единственный вариант, что пришёл мне тогда в голову: хранить число в строке. Цеплять сторонние библиотеки под это дело мне не хотелось, поэтому я решил сделать небольшой класс с сокращением fluint.
Доступно
- Базовая математика:
- +,-,*,/
- +=, -=, *=, /=
- Логические операции: ==, !=, <, >
- Преобразования:
- const char*
- int
- long long
- ostream (<<)
- istream(>>)
- Доступ по индексу (разряд: десятки, сотни, etc)
Примеры
fluint BigData = (unsigned long long)(-1); // 18446744073709551615
BigData += 135; // 18446744073709551750
fluint NotBig = BigData / 10; // 1844674407370955175
unsigned long long SimpleData = NotBig - 5; // 1844674407370955170
Комментарии (4)
fougasse
17.10.2019 00:54Какую задачу вы решили?
Чем существующие реализации не подошли?
Почему 11 плюсы в конце 2019 года?
В чём кроссплатформенность?
Это лабораторная работа?
Вопросы-вопросы.
ncr
17.10.2019 01:27а что если разработчику захочется фентези в 3987 году?
Если проблемы нет, её надо придумать.
vital72
17.10.2019 03:45что за жесть… хранить внутреннюю переменную в виде строки, а умножение — это ващще эпик фэйл.
MomoDev
В общем вы написали свой велосипед длинной арифметики. А в чем собственно заключается полезность статьи?