gpt4 book ai didi

objective-c - CGFloat:round、floor、abs 和 32/64 位精度

转载 作者:太空狗 更新时间:2023-10-30 03:23:31 26 4
gpt4 key购买 nike

TLDR:如何以编译 32 位和 64 位 CGFloats 而没有警告的方式调用标准浮点代码?


CGFloat 被定义为 double 或 float,这取决于编译器设置和平台。我正在尝试编写在两种情况下都能正常工作的代码,而不会产生很多警告。

当我使用 floor、abs、ceil 等函数和其他简单的浮点运算时,我收到有关值被截断的警告。例如:

warning: implicit conversion shortens 64-bit value into a 32-bit value

我不关心计算的正确性或精度损失,因为我意识到我可以一直使用所有函数的 double 版本(floor 而不是 floorf 等);但是,我将不得不容忍这些错误。

有没有一种方法可以干净地编写支持 32 位和 64 位 float 的代码,而不必使用大量的 #ifdef __ LP64 __ 或为所有标准浮点函数编写包装函数?

最佳答案

您可以使用 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'.

关于objective-c - CGFloat:round、floor、abs 和 32/64 位精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com