6
整数格上的误报
排行榜 User Language Score ========================================= Ell C++11 293,619,555 feersum C++11 100,993,667 Ell C++11 78,824,732 Geobits Java 27,817,255 Ell Python 27,797,402 Peter Taylor Java 2,468 <reference> Julia 530 背景 在整数坐标的二维网格上工作时,有时您想知道两个向量(具有整数分量)是否具有相同的大小。当然,在欧几里得几何中,向量的大小(x,y)由 √(x² + y²) 因此,幼稚的实现可能会为两个向量计算该值并比较结果。这不仅会导致不必要的平方根计算,而且还会导致浮点数不准确的问题,这可能会产生误报:幅值不同但浮点表示中的有效数字都相同的向量。 出于此挑战的目的,我们将误报定义为一对坐标对,(a,b)并(c,d)为此: 当表示为64位无符号整数时,它们的平方大小不同。 当表示为64位二进制浮点数并通过64位平方根计算得出时,它们的大小相同(根据IEEE 754)。 例如,使用16位表示(而不是64位),产生假阳性的最小一对矢量为: (25,20) and (32,0) 它们的平方平方大小分别是1025和1024。求平方根产量 32.01562118716424 and 32.0 但是在16位浮点数中,这两个都被截断为32.0。 同样,最小的2对产生32位表示形式的假阳性 (1659,1220) and (1951,659) …