關於Math類,官方的解釋是(Api1.6中文版):java
Math
類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函數。編程
與 StrictMath
類的某些數學方法不一樣,並不是 Math
類全部等價函數的實現都定義爲返回逐位相同的結果。此類在不須要嚴格重複的地方能夠獲得更好的執行。數組
默認狀況下,不少 Math
方法僅調用 StrictMath
中的等價方法來完成它們的實現。建議代碼生成器使用特定於平臺的本機庫或者微處理器指令(可用時)來提供 Math
方法更高性能的實現。這種更高性能的實現仍然必須遵照 Math
的規範。多線程
實現規範的質量涉及到兩種屬性,即返回結果的準確性和方法的單調性。浮點 Math
方法的準確性根據 ulp(units in the last place,最後一位的進退位)來衡量。對於給定的浮點格式,特定實數值的 ulp 是包括該數值的兩個浮點值的差。看成爲一個總體而不是針對具體參數討論方法的準確性時,引入的 ulp 數用於任何參數最差狀況下的偏差。若是一個方法的偏差老是小於 0.5 ulp,那麼該方法始終返回最接近準確結果的浮點數;這種方法就是正確舍入。一個正確舍入的方法一般能獲得最佳的浮點近似值;然而,對於許多浮點方法,進行正確舍入有些不切實際。相反,對於 Math
類,某些方法容許偏差在 1 或 2 ulp 的範圍內。非正式地,對於 1 ulp 的偏差範圍,當準確結果是可表示的數值時,應該按照計算結果返回準確結果;不然,返回包括準確結果的兩個浮點值中的一個。對於值很大的準確結果,括號的一端能夠是無窮大。除了個別參數的準確性以外,維護不一樣參數的方法之間的正確關係也很重要。所以,大多數偏差大於 0.5 ulp 的方法都要求是半單調的:只要數學函數是非遞減的,浮點近似值就是非遞減的;一樣,只要數學函數是非遞增的,浮點近似值就是非遞增的。並不是全部準確性爲 1 ulp 的近似值都能自動知足單調性要求。 dom
Math做爲數學運算的方法,其方法包括以下:函數
一、abs();求絕對值,根據傳的參數不一樣,其返回值類型也不一樣,可傳的參數類型有double、float、int、long四種類型,返回值類型也相對應的返回這四種類型,具體根據串的值來定。性能
如:public static int abs(int a)spa
int
值的絕對值。若是參數爲非負數,則返回該參數。若是參數爲負數,則返回該參數的相反數。注意,若是參數等於
Integer.MIN_VALUE
的值(即可以表示的最小負
int
值),那麼結果與該值相同且爲負。
參數:a
- 要肯定絕對值的參數。線程
二、max();求傳入的兩個值中的最大值,這兩個值的數據類型要相同,如傳入兩個double、int、float、long值相對應返回的也是該類型的最大那個值。code
如:public static double max(double a,double b)
double
值中較大的一個。也就是說,結果爲更接近正無窮大的參數。若是參數值相同,那麼結果也是同一個值。若是任一值爲 NaN,那麼結果爲 NaN。與數值比較運算不一樣,該方法認爲負 0 嚴格小於正 0。若是一個參數爲正 0,另外一個參數爲負 0,那麼結果爲正 0。
參數:a
- 參數。
b
- 另外一個參數。
a
和
b
中的較大者。
三、min();用法與max()同樣,只是這個方法是求兩個數中的最小值。
如:public static long min(long a,long b)
long
值中較小的一個。也就是說,結果爲更接近
Long.MIN_VALUE
值的參數。若是參數值相同,那麼結果也是同一個值。
參數:a
- 參數。
b
- 另外一個參數。
a
和
b
中的較小者。
三、cos(double a);返回三角的餘弦;方法以下:
public static double cos(double a)
參數:a
- 以弧度表示的角。
四、tan(double a);返回三角的正切,用法同餘弦。
固然還有不少不數學運算,如正弦sin(double a);立方根cbrt(double a);等。此處主要以random()爲主。
public static double random()
double
值,該值大於等於
0.0
且小於
1.0
。返回值是一個僞隨機選擇的數,在該範圍內(近似)均勻分佈。
第一次調用該方法時,它將建立一個新的僞隨機數生成器,與如下表達式徹底相同
以後,新的僞隨機數生成器可用於此方法的全部調用,但不能用於其餘地方。new java.util.Random
此方法是徹底同步的,可容許多個線程使用而不出現錯誤。可是,若是許多線程須要以極高的速率生成僞隨機數,那麼這可能會減小每一個線程對擁有本身僞隨機數生成器的爭用。
0.0
且小於
1.0
的僞隨機
double
值。
比較常見的就是彩票裏面機選號碼時產生的隨機數了,此處以雙色球中產生的隨機數爲例,其他的產生隨機數的方法相似,具體代碼以下所示:
/** * 模擬雙色球輸入的次數隨機生成選擇的類即前面6個紅球加最後一位籃球 * @author James * */ public class Tickit { public static void main(String[] args) { System.out.println("請輸入隨機的次數:"); Scanner input = new Scanner(System.in); int number = input.nextInt();//要產生的隨機的次數 if (number > 1) { for (int i = 0; i < number; i++) { int[] nums = new int[7];//生成一個長度爲7的數組存放數值 int[] num = getRedBall(); for (int j = 0; j < num.length; j++) { nums[j] = num[j]; } nums[6] = getBlueBall(); //遍歷新生成的數組 System.out.println(); for (int n : nums) { System.out.print(n + "\t"); } } } } /** * 生成6個紅球的方法 * * @return 返回生成的數字集合 */ public static int[] getRedBall() { int[] nums = new int[6]; int num; boolean isTheBall = false; for (int i = 0; i < 6; i++) { do { num = (int) (Math.random() * 33) + 1; isTheBall = isHava(num, nums); } while (isTheBall); nums[i] = num; } Arrays.sort(nums);//調用默認的升序排列數組的方法 return nums; } /** * 判斷是否有重複的數字 * * @param num * 要添加的數 * @param nums * 要添加進的數組 * @return 是否重複 */ public static boolean isHava(int num, int[] nums) { for (int j = 0; j < 6; j++) { if (num == nums[j]) { return true; } } return false; } /** * 隨機選擇1個籃球 * * @return 籃球的數字 */ public static int getBlueBall() { int num = (int) (Math.random() * 16) + 1; return num; } }
因爲Math.random()產生的數在0<= number<1;全部若是要產生一個1-16之間的數要將number乘以16,根據java編程的特性轉換成int型的時候將捨去小數點只留整數部分,此時產生的結果是0-15之間的數,因此要在此基礎上再加1這樣就產生了1-16的數,其他範圍肯定的隨機數也是按此方法操做。