楼主:
yanadsl (酩狱)
2014-10-31 19:06:59开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
code::block
问题(Question):
求出长度<500的所有的直角三角形边长可能
使用三种方式答案竟然都不一样......
17~19行的条件
//if(hypot(side1,side2) == hypotenuse)
//if(side1*side1 + side2*side2 == hypotenuse*hypotenuse)
//if(pow(side1,2) + pow(side2,2) == pow(hypotenuse,2))
应该都符合且相同,为何执行出来的结果都不一样?
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/OuXqAKmU
hypot, pow 的 return type 都是浮点数, 有精度的问题
楼主:
yanadsl (酩狱)
2014-10-31 19:27:00所以用相减<0.1或是转换成int再比较应该就没问题了?
其实ide碰到operator==(float, float)应该要吐警告的只是目前好像没有这种实作 XD 这一格洞太多人踩了
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-11-01 18:51:00如果吐警告那有时候真的想测完全相等时怎么办 XD
作者:
EdisonX (卡卡兽)
2014-11-01 22:28:00我是想知道 operator== , 对于 +-0.0 结果有没定义 XD
gcc对float的==编出来是用ucomiss算的就是
float完全相等的定义只有一个 就是bitwise相等叫使用者去自己做bitwise equal就好了(被打老实讲已use case来讲 float equal根本是不合理 XD问题就在于像pow会传equal大家却不小心没注意到 orz
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-11-02 13:58:00float?
三边长a, b, c, 其中a=m^2-n2, b=2mn, c=m^2+n^2m, n互质可以得到a, b, c互质的解只要把m, n用整数代入跑一圈 删掉重复的 就不用符点数了