作者yhn0tgb60 (呦厚厚)
看板C_and_CPP
标题[问题] abs 与 pow 的底层运作 ???
时间Tue Sep 15 10:29:37 2009
我在写的程式中 常常需要把两个座标点拿出来比距离
当然我不可能用平方开根号的方式比 因为开根号太耗费效能了
而且我只是要比大小而已 所以只需要可以参考的数值就够了
想请问 取绝对值 abs(x1-x2)+abs(y1-y2)
或是平方 pow((x1-x2),2)+pow((y1-y2),2)
这两种方式在 c++的底层里 哪一个比较耗效能 哪一个比较快
谢谢了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.70.65.74
1F:推 VictorTom:浮点数?? 平方可以直接用 tx=x1-x2, tx*tx 来取代@_@" 09/15 10:37
2F:推 ledia:平方的话请用 (x1-x2)*(x1-x2); 用 pow 太慢 09/15 10:38
3F:→ ledia:另外这两个比出来的结果差满多的喔 09/15 10:38
4F:→ VictorTom:浮点数abs可以用把MSB强制AND成0做到; 谁比较快嘛...@@" 09/15 10:39
5F:推 Ebergies:两个加起来会是错的... 而且错不小, 建议还是平方 09/15 11:53
6F:→ yhn0tgb60:两个座标的数都是浮点数没错 09/15 13:47
7F:→ yhn0tgb60:楼上的 L大 请问差很多 到底是哪一个快阿 ??? 09/15 13:47
8F:→ yhn0tgb60:楼上的 E大 你说会错是用 abs()吗 为什麽会错很大?? 09/15 13:48
9F:推 ledia:我说的差很多是比大小会错很大 XD 09/15 13:51
10F:→ ledia:时间的话很难说 09/15 13:51
11F:→ ledia:用 abs 的话, (0,0) 到 (1,1) > (0, 0) 到 (1.5, 0) 09/15 13:52
12F:→ ledia:用根号的话, (0,0) 到 (1,1) < (0, 0) 到 (1.5, 0) 09/15 13:53
13F:→ ledia:说错, 是用平方法, 不是根号 09/15 13:54
14F:→ yhn0tgb60:喔喔 我懂了 谢谢 09/15 14:04