Почему нет 2-байтового числа с плавающей запятой и существует ли реализация?

в http://www.mail-archive.com/jquery-en@googlegroups.com/msg03998.html говорится:

... и .removeClass () удалил бы все классы...

Это работает на меня;)

аплодисменты

26
задан phuclv 7 May 2019 в 16:10
поделиться

2 ответа

Если у вас мало памяти, вы решили отказаться от концепции поплавка? Число с плавающей запятой использует много битов только для сохранения десятичной точки. Вы можете обойти это, если вы знаете , где вам нужна десятичная точка, скажем, вы хотите сохранить значение в долларах, вы можете просто сохраните его в центах:

uint16_t cash = 50000;
std::cout << "Cash: $" << (cash / 100) << "." << ((cash % 100) < 10 ? "0" : "") << (cash % 100) << std::endl;

Это, конечно, единственный вариант, если вы можете заранее определить положение десятичной точки. Но если вы можете, всегда предпочитайте это, потому что это также ускоряет все вычисления!

rgds, Kira: -)

12
ответ дан 28 November 2019 в 07:36
поделиться

TL; DR: 16-разрядные числа с плавающей запятой существуют, и существуют различные программные и аппаратные реализации

В настоящее время существует 2 общих стандартных 16-разрядных формата с плавающей запятой: двоичный код IEEE-75416 и Google bfloat16 . Поскольку они стандартизированы, очевидно, если кто-то, кто знает спецификацию, может написать реализацию. Некоторые примеры:

Или, если вы не хотите их использовать, вы также можете спроектировать другой 16-разрядный формат с плавающей запятой и реализовать его


2-байтовые операции с плавающей запятой обычно не используется, потому что даже точности float недостаточно для нормальных операций и всегда следует использовать double по умолчанию, если вы не ограничены пропускной способностью или размером кэша. Литералы с плавающей точкой также double при использовании без суффикса в C и C-подобных языках. См.

Однако плавающие менее 32-битные существуют . Они в основном используются для хранения , например, в графике, когда 96 бит на пиксель (32 бита на канал * 3 канала) слишком потрачены впустую, и будут преобразованы в обычный 32-битный тип с плавающей запятой для вычислений (за исключением некоторых специальных аппаратных средств). Различные 10, 11, 14-битные типы с плавающей запятой существуют в OpenGL. Во многих форматах HDR для каждого канала используется 16-разрядное число с плавающей запятой, а Direct3D 9.0, а также некоторые графические процессоры, такие как Radeon R300 и R420, имеют 24-разрядный формат с плавающей запятой. 24-разрядные операции с плавающей запятой также поддерживаются компиляторами в некоторых 8-разрядных микроконтроллерах , таких как PIC , где поддержка 32-разрядных операций с плавающей запятой слишком дорога. 8-битные или более узкие типы с плавающей точкой менее полезны, но из-за своей простоты их часто преподают в учебных программах по информатике. Кроме того, маленький float также используется в кодировании команд ARM для небольших операций с плавающей точкой.

В редакцию IEEE 754-2008 официально добавлен 16-битный формат с плавающей запятой, AKA binary16 или с половинной точностью , с 5-битным показателем и 11-битная мантисса

Некоторые компиляторы имели поддержку двоичного кода IEEE-754, но в основном для преобразования или векторизации, а не для вычислений (потому что они не достаточно точны). Например, набор инструментов ARM имеет __fp16 , который может быть выбран из двух вариантов: IEEE и альтернативный в зависимости от того, хотите ли вы больше представлений диапазона или NaN / inf. GCC и Clang также поддерживают __fp16 наряду со стандартизированным названием _Float16. См. Как включить тип __fp16 в gcc для x86_64

Недавно из-за роста ИИ появился другой формат, названный bfloat16 ( мозговой формат с плавающей точкой ), который представляет собой простое усечение старших 16 битов двоичного32 IEEE-754, ставшим общим

Мотивация за сокращенной мантиссой происходит от Эксперименты Google, которые показали, что можно сократить мантиссу до тех пор, пока все еще можно представить крошечные значения ближе к нулю как часть суммы небольших различий во время обучения. Меньшая мантисса дает ряд других преимуществ, таких как уменьшение мощности умножителя и площади физического кремния.

  • float32: 242 = 576 (100%)
  • float16: 112 = 121 (21%)
  • bfloat16: 82 = 64 (11%)
]

Многие компиляторы, такие как GCC и ICC , теперь также получили возможность поддерживать bfloat16

Подробнее о bfloat16:

2
ответ дан 28 November 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: