История изменений
Исправление dva20, (текущая версия) :
Ты же не рубли считаешь, а точки в пространстве.
Дак я не знал как перебрать всего-то 6 знаков (порядков) у целого значения с ведущими нолями по другому как-то, нежели разделить на нужную ёмкость, например:
- Дано на вход целое - 123456 и capacity = 6
- Нужно разобрать число на числа из разрядов, получить отдельно 1,2,3,4,5,6. Если Capacity больше чем длина целого, то перед перечислением нужно добавить нули, то есть при Capacity = 8 нужно получить 0,0,1,2,3,4,5,6
Для этого, я просто делил исходный int на power(10, capacity) - примерно так, по памяти, может убавлял степень на 1 при возведении, точно сейчас не могу сказать., но в общем получал float = 0.00123456
Далее, в «цикле» (которого на самом деле нет, там где я это реализовывал, ну сейчас опустим это), я умножал 0.123456 на 10, чтобы справа налево получить одно целое из правой стороны - 1.2345600000000000000000000000001112212
Затем, я удалял целое, также математикой, и двигал следующее целое из правой в левую стороны. и так пока не закончится capacity.
Казалось бы, всё отлично, алгоритм прост, задача и её решение радует, но… НО!
У нас нет никаких циклов, переменных, есть только мат.операции + небольшие логические операции. Никаких If’ов нет. If это эквивалент умножения на 0. Есть только голая математика и поток от одного значения к другому и всё!
Так вот, меня не интересовали вот такие вот точности - 1.2345600000000000000000000000001112212
Я был удивлён тому, что даже 2 знака после запятой, уже не могут быть стабильны в вычислениях! То есть 0,56 * 10 - как бы «теряет» шестёрку! А округлить я не могу, так как нету в системе оператора округления Round to! Мне плевать на точные вычисления с миллиардной точности, мне всего-то хотелось оставить в исходном float 2 значения после запятой стабильными! Ну пусть оно (число) плавает там в миллиардных долях и плевать на это, но оно то в реальности плавает то в меньшую, то в большую сторону и в этом проблема.
Но я сделал это всё уже по другому, уже работает и ошибок не выдаёт.
Исправление dva20, :
Ты же не рубли считаешь, а точки в пространстве.
Дак я не знал как перебрать всего-то 6 знаков (порядков) у целого значения с ведущими нолями по другому как-то, нежели разделить на нужную ёмкость, например:
- Дано на вход целое - 123456 и capacity = 6
- Нужно разобрать число на числа из разрядов, получить отдельно 1,2,3,4,5,6. Если Capacity больше чем длина целого, то перед перечислением нужно добавить нули, то есть при Capacity = 8 нужно получить 0,0,1,2,3,4,5,6
Для этого, я просто делил исходный int на power(10, capacity) - примерно так, по памяти, может убавлял степень на 1 при возведении, точно сейчас не могу сказать., но в общем получал float = 0.00123456
Далее, в «цикле» (которого на самом деле нет, там где я это реализовывал, ну сейчас опустим это), я умножал 0.123456 на 10, чтобы справа налево получить одно целое из правой стороны - 1.2345600000000000000000000000001112212
Затем, я удалял целое, также математикой, и двигал следующее целое из правой в левую стороны. и так пока не закончится capacity.
Казалось бы, всё отлично, алгоритм прост, задача и её решение радует, но… НО!
У нас нет никаких циклов, переменных, есть только мат.операции + небольшие логические операции. Никаких If’ов нет. If это эквивалент умножения на 0. Есть только голая математика и поток от одного значения к другому и всё!
Так вот, меня не интересовали вот такие вот точности - 1.2345600000000000000000000000001112212
Я был удивлён тому, что даже 2 знака после запятой, уже не могут быть стабильны в вычислениях! То есть 0,56 * 10 - как бы «теряет» шестёрку! А округлить я не могу, так как нету в системе оператора округления Round to! Мне плевать на точные вычисления с миллиардной точности, мне всего-то хотелось оставить в исходном float 2 значения после запятой стабильными!
Но я сделал это всё уже по другому, уже работает и ошибок не выдаёт.
Исправление dva20, :
Ты же не рубли считаешь, а точки в пространстве.
Дак я не знал как перебрать всего-то 6 знаков (порядков) у целого значения с ведущими нолями по другому как-то, нежели разделить на нужную ёмкость, например:
- Дано на вход целое - 123456 и capacity = 6
- Нужно разобрать число на числа из разрядов, получить отдельно 1,2,3,4,5,6. Если Capacity больше чем длина целого, то перед перечислением нужно добавить нули, то есть при Capacity = 8 нужно получить 0,0,1,2,3,4,5,6
Для этого, я просто делил исходный int на power(10, capacity) - примерно так, по памяти, может убавлял степень на 1 при возведении, точно сейчас не могу сказать., но в общем получал float = 0.00123456
Далее, в «цикле» (которого на самом деле нет, там где я это реализовывал, ну сейчас опустим это), я умножал 0.123456 на 10, чтобы справа налево получить одно целое из правой стороны - 1.2345600000000000000000000000001112212
Затем, я удалял целое, также математикой, и двигал следующее целое из правой в левую стороны. и так пока не закончится capacity.
Казалось бы, всё отлично, алгоритм прост, задача и её решение радует, но… НО!
У нас нет никаких циклов, переменных, есть только мат.операции + небольшие логические операции. Никаких If’ов нет. If это эквивалент умножения на 0. Есть только голая математика!
Так вот, меня не интересовали вот такие вот точности - 1.2345600000000000000000000000001112212
Я был удивлён тому, что даже 2 знака после запятой, уже не могут быть стабильны в вычислениях! То есть 0,56 * 10 - как бы «теряет» шестёрку! А округлить я не могу, так как нету в системе оператора округления Round to! Мне плевать на точные вычисления с миллиардной точности, мне всего-то хотелось оставить в исходном float 2 значения после запятой стабильными!
Но я сделал это всё уже по другому, уже работает и ошибок не выдаёт.
Исходная версия dva20, :
Ты же не рубли считаешь, а точки в пространстве.
Дак я не знал как перебрать всего-то 6 знаков (порядков) у целого значения с ведущими нолями по другому как-то, нежели разделить на нужную ёмкость, например:
- Дано на вход целое - 123456 и capacity = 6
- Нужно разобрать число на числа из разрядов, получить отдельно 1,2,3,4,5,6. Если Capacity больше чем длина целого, то перед перечислением нужно добавить нули, то есть при Capacity = 8 нужно получить 0,0,1,2,3,4,5,6
Для этого, я просто делил исходный int на power(10, capacity) - примерно так, по памяти, может убавлял степень на 1 при возведении, точно сейчас не могу сказать., но в общем получал float = 0.00123456
Далее, в «цикле» (которого на самом деле нет, там где я это реализовывал, ну сейчас опустим это), я умножал 0.123456 на 10, чтобы справа налево получить одно целое из правой стороны - 1.2345600000000000000000000000001112212
Затем, я удалял целое, также математикой, и двигал следующее целое из правой в левую стороны. и так пока не закончится capacity.
Казалось бы, всё отлично, алгоритм прост, задача и её решение радует, но… НО!
У нас нет никаких циклов, переменных, есть только мат.операции + небольшие логические операции. Никаких If’ов нет. If это эквивалент умножения на 0. Есть только голая математика!
Так вот, меня не интересовали вот такие вот точности - 1.2345600000000000000000000000001112212
Я был удивлён тому, что даже 2 знака после запятой, уже не могут быть стабильны в вычислениях! То есть 0,56 * 10 - как бы «теряет» шестёрку! А округлить я не могу, так как нету в системе оператора округления Round to! Мне плевать на точные вычисления с миллиардной точности, мне всего-то хотелось оставить в исходном float 2 значения после запятой стабильными!