Очень очевидно!
float16_t
указан в «arm_neon.h» означает, что тип строго предназначен для инструкций CPU на основе ARM (в частности, процессоров ARM с поддерживаемым набором команд NEON).
До сих пор все устройства iOS работали на процессоре на базе ARM. Таким образом, ваш код хорош при компиляции для устройства (хотя, возможно, не будет работать в каком-то очень старом iOS-устройстве со старым ARM-процессором без NEON).
Однако iOS Simulator работает на Mac, который построен поверх архитектуры процессора x86/x64, а не ARM. Поэтому типы ARM просто не работают.
Я не уверен, почему вы действительно хотите работать с некоторыми оптимизированными данными ARM NEON типа float16_t
, когда float_t
работает отлично, везде. Но если вы все еще хотите использовать его и хотят, чтобы ваше приложение для запуска во всем мире, вы должны использовать условные директивы компиляции для компиляции коды:
#if TARGET_IPHONE_SIMULATOR
float_t x;
#else
float16_t x;
#endif
Надеется, что это помогает.
Я думаю, что вы тратите свое время, поскольку сохраненная память будет незначительной. Добавление одного изображения в приложение займет больше места, чем вы сохранили, используя этот тип. Не говоря уже о том, что это выглядит неподдерживаемым/трудным в использовании. – trojanfoe
Может быть, так. Думаю, я вернусь, если не получу предложение супер пупера в течение некоторого времени. Хотя я был немного неясен. Я хочу сохранить пропускную способность на внешнем интерфейсе, а не на внутренней памяти. Но ты можешь быть прав. Может быть, я трачу свое время. –
Не думаю, что я когда-либо видел типы, отличные от 'float' и' double', используемые в любом коде, где бы то ни было, во все мое время. – trojanfoe