Я пишу алгоритм, который занимается преобразованиями логит-нормальных распределений, которые имеют характеристику, заключающуюся в том, что при достаточно высоких сигмах/средних значения могут быть очень сильно «сжаты» к краям в точках 0 и 1. Я столкнулся с проблемой, когда значения, которые должны быть разными, конфликтуют, поскольку двойник C++ не может представлять достаточное количество цифр. Например, я применяю сигмовидную/логистическую функцию к двум достаточно высоким, но разным значениям, результат идентичен, хотя этого не должно быть, если бы двойные значения могли обеспечивать более высокую точность.
Я могу справьтесь с этим, объединив образцы, которые сталкиваются с одним и тем же значением. Но проблема в том, что около 1 происходит коллизия, потому что числа представлены так: 0,999999999953, например. Но около 0 этого не происходит, потому что C++ начинает представлять значения в научной записи, например: 0,12949384e-300. Последний может обеспечить гораздо более высокую точность, поэтому здесь не происходит коллизий. Но мне нужно симметричное поведение для обоих значений вокруг 0 и 1, чтобы гарантировать, что результат вычисляется одинаково с обеих сторон.
Есть ли в C++ такой тип, который не выполняет автоматическое вычисление результата? перейти на научные обозначения при представлении чрезвычайно малых величин? То есть я могу добиться того же поведения около 0, что и около 1?
Подробнее здесь: https://stackoverflow.com/questions/735 ... ent-very-s
Тип C++ с плавающей запятой, который не использует научную запись для представления очень маленьких значений? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как предотвратить научную запись при экспорте кадра данных pandas в csv?
Anonymous » » в форуме Python - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-