LINUX.ORG.RU

Почему C++ не может без потери данных сдвинуть запятую во float типе данных?

 ,


2

2

Привет всем!

Столкнулся с проблемой, простейшее умножение числа 0.56 на 10.0 не даёт точного результата. C++ просто не в состоянии перенести знак справа налево когда я хочу перенести разряд. Но при этом, 0.56 * 100.0 даёт точный ответ, точное число 56.0! Lol! ))))

Многие ответят скорее всего, что - «округли, да и всё!». Нет, округление не подходит, так как задача выполняется не в традиционных языках программирования, а в нодовой системе шейдеров Blender где ноды математики полагаются полностью на логику C++ в отношении математики и я не могу ничего с этим поделать кроме того, что доступно из математики в Блендер.

Да, в нодах есть операции округления, но мне это не подходит, потому что мне нужно получать из большого целого числа отдельные части разрядов, т.е. из числа 12345 получать отдельно число 1,2,3,4 и 5. При этом у меня нет никаких переменных, циклов и т.д.как в традиционных языках программирования. Есть только нодовый поток. Я научился это делать умножением и делением, получать отдельные разряды в нодовом потоке, но столкнулся со странной математикой в C++ на которые эти ноды опираются (полагаются).

Почему C++ не может просто сдвинуть запятую справа налево при умножении на 10, а при умножении на 100 может? Это баг какой-то или фича?

В других языках, которых я немного знаю, Java и Python (да, я понимаю, что это интерпретируемые языки) такого нет, результат всегда ожидаемый: 0.56 * 10.0 = 5.6 - P.S. Как оказалось - нет, см. комметарии.

https://godbolt.org/z/ErnbfePhf



Последнее исправление: dva20 (всего исправлений: 8)

Ответ на: комментарий от bugfixer

есть стойкое ощущение, что вы не деньгами оперируете в вычислениях на флоатах, а метриками над ними. ни один баланс не сойдется на флоатах.

ergo ★★★
()
Ответ на: комментарий от ergo

есть стойкое ощущение, что вы не деньгами оперируете в вычислениях на флоатах, а метриками над ними. ни один баланс не сойдется на флоатах.

Да фиг с ним с деньгами, давайте лучше за звук поговорим. Вот то что у Вас есть - Вам нравится?

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

Да фиг с ним с деньгами, давайте лучше за звук поговорим. Вот то что у Вас есть - Вам нравится?

да, более, чем устраивает :). но лучше бы в отдельной теме это обсуждать. ну или в телеграм - @halturin

ergo ★★★
()
Последнее исправление: ergo (всего исправлений: 1)

Премия за тупейший вопрос месяца.

anonymous
()
Ответ на: комментарий от dva20

Я так реализовал Часы

Ну так сделай шестнадцатиричные часы

Все проблемы с делением на 10 исчезнут

anonymous
()

Ты ещё спроси почему он тебе число Пи не полностью выводит.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.