lee*_*ker 11 objective-c cgfloat
TLDR:如何在没有警告的情况下编译32位和64位CGFloats的方式调用标准浮点代码?
CGFloat定义为double或float,具体取决于编译器设置和平台.我正在尝试编写在两种情况下都能正常工作的代码,而不会产生很多警告.
当我使用floor,abs,ceil和其他简单浮点运算之类的函数时,我会收到关于值被截断的警告.例如:
警告:隐式转换将64位值缩短为32位值
我不关心计算的正确性或精度损失,因为我意识到我可以一直使用所有函数的双精度版本(floor而不是floorf等); 但是,我必须容忍这些错误.
有没有办法干净地编写支持32位和64位浮点数的代码,而不必使用大量的#ifdef __ LP64 __,或者为所有标准浮点函数编写包装函数?
ken*_*ytm 19
您可以使用这些功能tgmath.h.
#include <tgmath.h>
...
double d = 1.5;
double e = floor(d); // will choose the 64-bit version of 'floor'
float f = 1.5f;
float g = floor(f); // will choose the 32-bit version of 'floorf'.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8176 次 |
| 最近记录: |