На первый взгляд мой вопрос может показаться немного странным; но приведение двойного значения к значению с плавающей запятой - это не то, что я хочу. Поскольку, когда вы его используете, вы просто теряете некоторую точность по отношению к правилам, определенным IEEE-754, и не можете добиться фактического сопоставления двойного значения с диапазоном с плавающей запятой; это бесполезно. Следующее выражение работает, но оно очень дорого, когда у вас есть большое количество входных данных:
float mappedVal = (float)((val * MAX_FLOAT_VALUE + 1) / MAX_DOUBLE_VALUE);
Могу ли я приблизить результат к упомянутому выше «mappedVal» с помощью каких-то побитовых операций, чтобы ускорить те же самые вычисления?
val == 1
: результат равен 0. - person Claude   schedule 15.03.20131/MAX_DOUBLE_VALUE
иMAX_FLOAT_VALUE/MAX_DOUBLE_VALUE
. - person Claude   schedule 15.03.2013float
значения не могут представлять все те же значения, что иdouble
значения. Это математически невозможно, так какfloat
имеет меньше битов. Следовательно, вы должны потерять информацию. Теоретически возможны многие преобразования. Некоторые сохранят точность в определенном диапазоне, но будут очень неточными за его пределами, некоторые изменят динамический диапазон, но сильно потеряют в точности и так далее. Чтобы получить ответ, вам необходимо указать характеристики желаемого преобразования. - person Eric Postpischil   schedule 15.03.2013