[问题] 直角三角形 求所有可能边长

楼主: 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
作者: azureblaze (AzureBlaze)   2014-10-31 19:16:00
浮点数计算误差 请检查误差大小而不是直接==
作者: jfcherng (小霹雳)   2014-10-31 19:20:00
hypot, pow 的 return type 都是浮点数, 有精度的问题
楼主: yanadsl (酩狱)   2014-10-31 19:27:00
所以用相减<0.1或是转换成int再比较应该就没问题了?
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-10-31 22:22:00
不要随便信赖int转换。
作者: Killercat (杀人猫™)   2014-11-01 07:41:00
其实ide碰到operator==(float, float)应该要吐警告的只是目前好像没有这种实作 XD 这一格洞太多人踩了
作者: uranusjr (←這人是超級笨蛋)   2014-11-01 18:51:00
如果吐警告那有时候真的想测完全相等时怎么办 XD
作者: EdisonX (卡卡兽)   2014-11-01 22:28:00
我是想知道 operator== , 对于 +-0.0 结果有没定义 XD
作者: x000032001 (版废了该走了)   2014-11-01 23:21:00
gcc对float的==编出来是用ucomiss算的就是
作者: Killercat (杀人猫™)   2014-11-02 12:00:00
float完全相等的定义只有一个 就是bitwise相等叫使用者去自己做bitwise equal就好了(被打老实讲已use case来讲 float equal根本是不合理 XD问题就在于像pow会传equal大家却不小心没注意到 orz
作者: uranusjr (←這人是超級笨蛋)   2014-11-02 13:58:00
float?
作者: Killercat (杀人猫™)   2014-11-02 17:05:00
没错 打错字 XD
作者: redmilk   2014-11-02 21:03:00
三边长a, b, c, 其中a=m^2-n2, b=2mn, c=m^2+n^2m, n互质可以得到a, b, c互质的解只要把m, n用整数代入跑一圈 删掉重复的 就不用符点数了

Links booklink

Contact Us: admin [ a t ] ucptt.com