CGFloat:round、floor、abs 和 32/64 位精度
TLDR:如何以编译 32 位和 64 位 CGFloats 且不发出警告的方式调用标准浮点代码?
CGFloat 定义为 double 或 float,具体取决于编译器设置和平台。我正在尝试编写在这两种情况下都能正常工作的代码,而不会生成大量警告。
当我使用下限、abs、ceil 等函数和其他简单的浮点运算时,我会收到有关值被截断的警告。例如:
警告:隐式转换将 64 位值缩短为 32 位值
我不关心计算的正确性或精度损失,因为我意识到我可以一直使用所有函数的双精度版本( Floor 而不是 Floorf 等);然而,我不得不容忍这些错误。
有没有一种方法可以干净地编写支持 32 位和 64 位浮点数的代码,而不必使用大量 #ifdef __ LP64 __ ,或为所有标准浮点函数编写包装函数?
TLDR: How do I call standard floating point code in a way that compiles both 32 and 64 bit CGFloats without warnings?
CGFloat is defined as either double or float, depending on the compiler settings and platform. I'm trying to write code that works well in both situations, without generating a lot of warnings.
When I use functions like floor, abs, ceil, and other simple floating point operations, I get warnings about values being truncated. For example:
warning: implicit conversion shortens 64-bit value into a 32-bit value
I'm not concerned about correctness or loss of precision in of calculations, as I realize that I could just use the double precision versions of all functions all of the time (floor instead of floorf, etc); however, I would have to tolerate these errors.
Is there a way to write code cleanly that supports both 32 bit and 64 bit floats without having to either use a lot of #ifdef __ LP64 __ 's, or write wrapper functions for all of the standard floating point functions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
tgmath.h
中的这些函数。You may use those functions from
tgmath.h
.如果你只需要几个功能,你可以使用这个:
If you only need a few functions you can use this instead: