用负浮点值计算比例

时间:2012-03-13 00:51:55

标签: c++ math optimization

我想知道在C ++中是否有任何方法可以计算在变量和极值中都可能存在负值的比例。

我的目标是将浮动文本输入窗口小部件与固定的极值同步(例如,用户可以在A,B = any_constant_real_number之间输入A(最小值)和B(最大值)之间的任何双值),滑块只能在0和100(简化)。

如果A和B都是正面的,那么一切都是微不足道的。如 val_slider =((val_textin-A)* 100)/(B-A)

但由于A和B可以假设为真实,它在我看来唯一的可能性是使用几个if / case,或涉及大量abs()的大型公式,并检查0-division,它们非常容易出错,与这么简单的任务相比,成本非常高。

在c / c ++ / stl中有没有更快更短的方法来实现相同的目标?

请原谅我糟糕的英语。任何提示?谢谢。

2 个答案:

答案 0 :(得分:3)

您的公式也可以正常使用负值AB,并记录为A < B

例如,如果您希望用户能够输入-100到100之间的值,并将这些值映射到0-100的滑块,当用户输入-90时,您将获得:

((-90 - A) * 100) / (B - A) = ((-90 - (-100)) * 100) / (100 - (-100)) 
                            = 10 * 100 / 200
                            = 5

输入值为50会导致滑块值为:

((50 - A) * 100) / (B - A) = ((50 - (-100)) * 100) / (100 - (-100)) 
                           = 150 * 100 / 200
                           = 75

答案 1 :(得分:1)

我不懂C ++,但我知道数学,所以试试:

val_slider = 100 * ( val_textin - A ) / ( B - A )
嘿等等。这正是你所拥有的。测试用例..

A = -200,B = + 200,val_texin = 100(75%的吧,对吧?)

val_slider = 100 *(100 - -200)/(200 - - 200) =(300)/(400)* 100 = 75

看,你做得对。可能发生的唯一事情是B == A,但这不能用数学计算,需要一个IF。如果它们相等,则val_slider正好是B(或A,因为它们相等)。