我正在尝试检查c ++中的1/a == 1/b + 1/c
a
,b
和c
为正整数,a
介于1到10000之间。
由于浮点精度问题,我目前得到错误的答案,而且在没有使用浮点数的情况下我找不到进行此比较的方法。
我如何得到正确答案?
答案 0 :(得分:14)
我认为这会对你有所帮助:
1 / a = 1 / b + 1 / c
1 = a / b + a / c
1 =(ac + ab)/ bc
bc = ac + ab #no需要更长时间
答案 1 :(得分:9)
将等式的两边乘以a*b*c
得到
b*c == a*c + a*b
答案 2 :(得分:4)
a(b+c)==b*c
应该可以正常工作:)
答案 3 :(得分:1)
比较浮点值时,由于精度问题,寻找精确匹配通常是不实际的。他们甚至可以阻止最简单的问题。
double d = sqrt(2);
cout << (d * d) == 2 // false
相反,您经常需要测试以查看值是否在某个误差范围内
fabs((d * d) - 2) < .001 // true
答案 4 :(得分:0)
由于这是一个编程问题,我认为你的意思是int
分裂。
现在,1/a
其中a
为积极的int
teger类型为0
或1
,实际上是1
iff a==1
。
我们可以滥用bool
演员如下:
(a==1) == ((b==1)+(c==1))
我们避免使用float
s。
答案 5 :(得分:0)
您可以随时将其转换为名为fraction的类。使用公分母将所有3个变量转换为相同的分母,添加b和c,然后与a进行比较。