Поддержка С++ _Float16

Я хочу выполнять вычисления с плавающей запятой половинной точности на Jetson AGX Xavier (с архитектурой armv8.2), который изначально поддерживает вычисления с плавающей запятой половинной точности. Поскольку тип данных _Float16 является арифметическим типом данных для чисел с плавающей запятой половинной точности, я написал следующий пример:

#include <stdio.h>
#include <math.h>


int main()
{

  _Float16 x = 38808.5;
  _Float16 y = 33096;
  _Float16 res;

  res=333.75*y*y*y*y*y*y+4*x*x*(11*4*x*x*y*y-y*y*y*y*y*y-121*y*y*y*y-2.0)   
    +5.5*y*y*y*y*y*y*y*y+2*x/(2*y);

  printf("%e\n", (double)res);
   return 0;
}

Используя gcc-7, я могу успешно скомпилировать и запустить его, но с g++-7 я получил ошибку:

‘_Float16’ was not declared in this scope

Согласно этой ссылке, кажется, что _Float16 не поддерживается C++ . Мне было интересно, есть ли альтернатива использованию типа данных _Float16 в C++?


person Sooora    schedule 10.03.2020    source источник
comment
Вам нужен тип __fp16, который доступен при компиляции с -mfp16-format. См. также Половина точности GCC. В связанном вопросе обратите внимание на ответ @phuclv   -  person Pixelchemist    schedule 11.03.2020
comment
@Pixelchemist Но __fp16 - это только формат хранения. и я хочу использовать арифметический формат.   -  person Sooora    schedule 11.03.2020