2012-03-13 112 views
0

我想知道在C++中是否有任何方法可以計算在可變和極值兩種情況下可能出現負值的比例。用負浮點值計算比例

我的目標是使浮動文本輸入小部件與固定極值同步(例如,用戶可以用A,B = any_constant_real_number在A(min)和B(max)之間輸入任何雙精度值)介於0和100之間(以簡化)。

如果A和B都是正數,那麼一切都是微不足道的。作爲 val_slider =((val_textin-A)* 100)/(BA)

但作爲A和B可以假設是真實的,它看起來唯一的可能性是使用幾個if/cases或涉及很多abs()並檢查了0分區,與這樣一個簡單的任務相比,這些分區相當容易出錯並且代價非常高。

是否有任何更快,更短的方式來實現相同的C/C++/STL?

請原諒我的英語不好。任何提示?謝謝。

回答

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 
+0

Omg,對不起,這裏遲到了。我得在晚上停止編碼。測試時我真的犯了一個愚蠢的錯誤。謝謝! – jalone 2012-03-13 01:04:10

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,因爲它們相等)。