2014-09-01 18 views
-3

我想歸一化-xx之間的值到-11之間的值。從[-x | x]到[-1 | 1]的歸一化值

我以爲value/Math.abs(value),但問題是如果 值是0,不起作用。

沒有if和else,有沒有可能,所以用一個操作?

也許我應該補充一點,那個值只能是-x,x或者0。

+0

按照你的說法,Math.abs(0)的除外結果是什麼。根據我的理解,它只返回0。任何值除以0就會給出例外。 – Ajit 2014-09-01 12:44:43

+0

你需要知道'x'以及'value'是什麼。 – 2014-09-01 12:46:08

+0

(爲什麼是-2?)忽略浮點精度,轉換必須是可逆的嗎? * I.e. *必須將每個唯一的輸入值映射到不同的歸一化值? – Bathsheba 2014-09-01 12:52:08

回答

1

看看java.lang的。整數類。有一些不錯的靜態方法來幫助你,主要是Integer.signum(int)

這將做的工作,如果你想0轉換爲1太,添加一個檢查0:

int x = value == 0 ? 1 : Integer.signum(value); 

編輯:龍包含同樣的方法,長期完成這項工作。

或者,如果沒有代碼;可能更慢,但OP特別要求:

final static int[] TABLE = { -1, 1 (or 0), 1 }; 
int x = TABLE[Integer.signum(value) + 1]; 
+0

但這就是if else ..只是短... – 2014-09-01 13:09:58

+1

@ T_01 Integer.signum()不*如果其他。你還沒有定義你想要做零的東西;所以在挑選答案之前,可能會讓你的*問題清楚? – Durandal 2014-09-01 13:14:45

+0

我的問題有什麼問題? 如果別人是「?:」 對不起,我不完美英語... 再次:我有一個價值。它是-x,x或0.只有這3種可能性。現在我想要一個方法規範(int val),它應該返回-1,1或0,但沒有條件檢查,如「?:」或其他。 – 2014-09-01 13:18:33

4
value/Math.abs(x) 

是你需要的。 x顯然不應該爲零。

你也應該考慮如何處理value > x的情況。

+0

@BackSlash假設'x> = abs(值)'。 – 2014-09-01 12:45:29

+1

如果'x'是'0',那麼它已經被歸一化了。 @PeterLawrey否,'Math.abs(x)> 0'是假設。 – Theolodis 2014-09-01 12:46:20

+0

+1,這是正確的。不失一般性,您可以放棄「abs」。 – Bathsheba 2014-09-01 12:57:52

0

讓我們假設你只想要號碼的符號。如果你希望0返回不同的值有替代楠爲0

這個返回NaN,0:您可以使用

double sign = Math.signum(x); 

注意。

注:條件可能更簡單/更清晰。例如

int sign = x < 0 ? -1 : +1; 

int sign = x > 0 ? +1 : x < 0 : -1 : 0; 
0

這裏有一個數學方法,我開始從-5到5,並轉換在-1到1

max=1; 
    min=-1; 
    maxold=-5; 
    minold=5; 

    value=2; 

    newvalue= (max-min)/(maxold-minold)*(value-minold)+min; 
    alert(newvalue); 
+0

這簡化了'value/max'(假設'min = -max'和'minold = -maxold')。通過代數犁,你會看到這個。 – Bathsheba 2014-09-01 12:55:48

+0

我不知道maxold或minold。 – 2014-09-01 13:08:22

+0

maxOld和minOld是你的-x/x。我使用這個公式只是因爲有了這個,你可以改變從-x到y的範圍,其中x!= y – 2014-09-01 19:34:50