Java開發筆記(十一)常見的數學函數

前面介紹了Java編程的四則運算,雖然提供了基礎的加減乘除符號,可是數學上還有其它運算符號,包括四捨五入用到的約等號≈、求絕對值的「| |」、開平方的「√ ̄」,這些運算符形態萬千,並且並不是ASCII碼的基本字符,也就意味着它們沒法原樣搬到Java來。
爲此,Java的設計師封裝了一套數學函數庫Math,把加減乘除之外的常見數學運算都歸入,而後做爲Math庫的函數方法提供給程序員調用。好比四捨五入變成了Math庫的round方法,取絕對值變成了Math庫的abs方法,Math庫另外提供了取整方法floor和ceil。其中floor方法指的是將變量往下取整,也就是往數值小的方向取整;ceil方法指的是將變量往上取整,也就是往數值大的方向取整。
須要注意的是,若是變量值爲負數(假設x=-9.9),那麼對x作floor取整將獲得-10,對x作ceil取整將獲得-9,這種狀況與常人理解的正數取整並不相同。假設變量值爲正數(如x=9.9),則對x作floor向下取整將獲得9,對x作ceil向上取整將獲得10。負數的取整結果看似有悖常理,其實徹底沒有毛病,由於floor方法取的是數值更小的整數,而ceil方法取的是數值更大的整數。既然-10<-9.9<-9,因而floor取整獲得了數值更小的-10,而ceil取整獲得了數值更大的-9。若想眼見爲實的話,則可運行下面的測試代碼加以驗證:java

		double decimalPositive = 9.9;
		// 四捨五入
		long roundPositive = Math.round(decimalPositive);
		System.out.println("roundPositive="+roundPositive);
		// 往下取整,也就是往數值小的方向取整
		double floorPositive = Math.floor(decimalPositive);
		System.out.println("floorPositive="+floorPositive);
		// 往上取整,也就是往數值大的方向取整
		double ceilPositive = Math.ceil(decimalPositive);
		System.out.println("ceilPositive="+ceilPositive);
		double decimalNegative = -9.9;
		// 四捨五入
		long roundNegative = Math.round(decimalNegative);
		System.out.println("roundNegative="+roundNegative);
		// 往下取整,也就是往數值小的方向取整
		double floorNegative = Math.floor(decimalNegative);
		System.out.println("floorNegative="+floorNegative);
		// 往上取整,也就是往數值大的方向取整
		double ceilNegative = Math.ceil(decimalNegative);
		System.out.println("ceilNegative="+ceilNegative);
		// 取絕對值
		double absoluteValue = Math.abs(decimalNegative);
		System.out.println("absoluteValue="+absoluteValue);

  

科學計算上經常還須要開平方、冪運算、求對數等複雜函數,Java自帶的Math庫也提供了相應的方法,例如sqrt方法對應開平方運算,pow方法對應求某數的n次方,exp方法對應求天然常數e的n次方,log方法對應求天然對數的運算(即exp方法的逆運算),log10方法對應求底數爲10的對數。這些方法的詳細調用代碼以下所示:程序員

		double nine = 9;
		// 開平方。對應數學符號√ ̄
		double sqrt = Math.sqrt(nine);
		System.out.println("sqrt="+sqrt);
		// 求n次方。pow的第一個參數爲冪運算的底數,第二個參數爲冪運算的指數
		double pow = Math.pow(nine, 2);
		System.out.println("pow="+pow);
		double five = 5;
		// 求天然常數e的n次方
		double exp = Math.exp(five);
		System.out.println("exp="+exp);
		// 求天然對數,爲exp方法的逆運算。對應數學函數lnN
		double log = Math.log(exp);
		System.out.println("log="+log);
		// 求底數爲10的對數。對應數學函數logN
		double log10 = Math.log10(100);
		System.out.println("log10="+log10);

  

除了代數運算的常見函數以外,Math庫還提供了幾何方面的三角函數運算,包括正弦、餘弦、正切、反正弦、反餘弦、反正切都能找到對應的Math方法。不過Math庫的三角方法與幾何上的三角函數用法有所不一樣,幾何的三角函數如sin、cos,後面跟着角度的數值,而Math庫的三角方法跟着是弧度的數值。所謂弧度指的是該角度對應的圓弧長度比去圓的半徑,即:弧度=弧長/半徑=(角度/360)*2πr/r=角度*π/180。搞清楚了弧度與角度之間的關係,利用Math庫進行各類三角運算就簡單了,下面是這些三角方法的調用代碼例子:編程

		// 三角函數的角度
		double angle = 60;
		// 弧度=該角度對應的弧長/半徑
		double radian = angle*Math.PI/180;
		// 求某弧度的正弦。求反正弦要調用asin方法
		double sin = Math.sin(radian);
		System.out.println("sin="+sin);
		// 求某弧度的餘弦。求反餘弦要調用acos方法
		double cos = Math.cos(radian);
		System.out.println("cos="+cos);
		// 求某弧度的正切。求反正切要調用atan方法
		double tan = Math.tan(radian);
		System.out.println("tan="+tan);
		// 求某弧度的餘切。Math庫未提供求餘切值的方法,其實餘切值就是正切值的倒數
		double ctan = 1.0/tan;
		System.out.println("ctan="+ctan);
相關文章
相關標籤/搜索