Comparison CoreGraphics中的浮点比较(相等)
AppleComparison CoreGraphics中的浮点比较(相等),comparison,geometry,floating-point,core-graphics,equality,Comparison,Geometry,Floating Point,Core Graphics,Equality,AppleCoreGraphics.framework,CGGeometry.h: CG_INLINE bool __CGSizeEqualToSize(CGSize size1, CGSize size2) { return size1.width == size2.width && size1.height == size2.height; } #define CGSizeEqualToSize __CGSizeEqualToSize 为什么(苹果)会将浮动与==进
CoreGraphics.framework
,CGGeometry.h
:
CG_INLINE bool __CGSizeEqualToSize(CGSize size1, CGSize size2)
{
return size1.width == size2.width && size1.height == size2.height;
}
#define CGSizeEqualToSize __CGSizeEqualToSize
为什么(苹果)会将浮动与==
进行比较?我不敢相信这是个错误。你能给我解释一下吗?
(我期望类似于
fabs(size1.width-size2.width)<0.001
)。浮点比较是所有OSX和iOS架构上的本机宽度
对于浮动
,这涉及到:
i386、x86\u 64:
- 32位XMM寄存器(或第二个操作数的内存)
- 使用
ucomiss
- 32位寄存器
- 使用与
vcmp相同系列中的指令
float
或double
-x86_64)和典型值的范围,可以合理地假设舍入值通常能够足够准确地表示,这样在大多数情况下,结果将具有适当的可比性。因此,在这些限制范围内,“相当安全”、“相当准确”和“相当快”
在几何计算中,有时您可能更喜欢近似比较,但是,在这种情况下,苹果的实现是我认为最接近于通用解决方案的参考实现。我不确定使用<代码>=>代码有什么用,但我认为它要求苹果在文档中解释这一点。