iOS:float16_t在模拟器上不起作用

时间:2016-01-01 13:09:02

标签: ios floating-point

我尝试在iOS应用中使用float16_t类型来节省内存空间。它似乎在设备上完美运行,但它不是在模拟器上构建的。

在模拟器构建中,它失败并带有

  

未知的类型名称' float16_t&#39 ;;你是说' float_t'?

float16_t似乎在arm_neon.h中定义。

这可以修复,以便我可以在模拟器上使用该类型吗?

1 个答案:

答案 0 :(得分:4)

很明显!

float16_t表示该类型严格用于基于ARM的CPU指令(特别是具有支持的NEON指令集的ARM CPU)。

到目前为止,所有iOS设备都在基于ARM的CPU上运行。因此,在为设备编译时,您的代码很好(尽管可能不会在没有NEON的旧版ARM设备中运行旧版本的cpus)。

但是,iOS模拟器在Mac上运行,它基于x86 / x64 CPU架构,而不是ARM。所以ARM类型在这里不起作用。

我不确定为什么你真的想要使用某些ARM NEON优化数据类型,如float16_t,当float_t工作得很好时,无处不在。但是如果您仍然想要使用它并希望您的应用程序在任何地方运行,您应该使用条件编译指令来编译代码:

#if TARGET_IPHONE_SIMULATOR
    float_t x;
#else
    float16_t x;
#endif

希望它有所帮助。