我想歸一化-x
和x
之間的值到-1
和1
之間的值。從[-x | x]到[-1 | 1]的歸一化值
我以爲value/Math.abs(value)
,但問題是如果 值是0,不起作用。
沒有if和else,有沒有可能,所以用一個操作?
也許我應該補充一點,那個值只能是-x,x或者0。
我想歸一化-x
和x
之間的值到-1
和1
之間的值。從[-x | x]到[-1 | 1]的歸一化值
我以爲value/Math.abs(value)
,但問題是如果 值是0,不起作用。
沒有if和else,有沒有可能,所以用一個操作?
也許我應該補充一點,那個值只能是-x,x或者0。
看看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];
但這就是if else ..只是短... – 2014-09-01 13:09:58
@ T_01 Integer.signum()不*如果其他。你還沒有定義你想要做零的東西;所以在挑選答案之前,可能會讓你的*問題清楚? – Durandal 2014-09-01 13:14:45
我的問題有什麼問題? 如果別人是「?:」 對不起,我不完美英語... 再次:我有一個價值。它是-x,x或0.只有這3種可能性。現在我想要一個方法規範(int val),它應該返回-1,1或0,但沒有條件檢查,如「?:」或其他。 – 2014-09-01 13:18:33
讓我們假設你只想要號碼的符號。如果你希望0
返回不同的值有替代楠爲0
這個返回NaN,0:您可以使用
double sign = Math.signum(x);
注意。
注:條件可能更簡單/更清晰。例如
int sign = x < 0 ? -1 : +1;
或
int sign = x > 0 ? +1 : x < 0 : -1 : 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);
這簡化了'value/max'(假設'min = -max'和'minold = -maxold')。通過代數犁,你會看到這個。 – Bathsheba 2014-09-01 12:55:48
我不知道maxold或minold。 – 2014-09-01 13:08:22
maxOld和minOld是你的-x/x。我使用這個公式只是因爲有了這個,你可以改變從-x到y的範圍,其中x!= y – 2014-09-01 19:34:50
按照你的說法,Math.abs(0)的除外結果是什麼。根據我的理解,它只返回0。任何值除以0就會給出例外。 – Ajit 2014-09-01 12:44:43
你需要知道'x'以及'value'是什麼。 – 2014-09-01 12:46:08
(爲什麼是-2?)忽略浮點精度,轉換必須是可逆的嗎? * I.e. *必須將每個唯一的輸入值映射到不同的歸一化值? – Bathsheba 2014-09-01 12:52:08