最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 數(shù)學(xué)計算的具體使用

 更新時間:2020年01月02日 09:48:07   作者:hatlonely  
這篇文章主要介紹了java 數(shù)學(xué)計算的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

java.lang.Math 庫提供了常用的數(shù)學(xué)計算工具

常量

final double E = 2.7182818284590452354;         // 自然對數(shù)底數(shù)
final double PI = 3.14159265358979323846;        // 圓周率
final double DEGREES_TO_RADIANS = 0.017453292519943295; // 角度轉(zhuǎn)弧度
final double RADIANS_TO_DEGREES = 57.29577951308232;  // 弧度轉(zhuǎn)角度

取整

  • abs(x): 絕對值
  • floor(x): 向下取整
  • ceil(x): 向上取整
  • round(x): 四舍五入,如果有兩個(x.5),返回較大的那個數(shù)
  • rint(x): 最接近的整數(shù),如果有兩個(x.5),返回偶數(shù)
  • floorDiv(x, y): 向下取整除法
  • floorMod(x, y): java 默認(rèn)的取摸 % 得到的結(jié)果和 x 的符號相同,floorMod 和 y 的符號相同
double delta = 0.0000001;
assertEquals(Math.abs(-6), 6);
assertEquals(Math.floor(-6.2), -7, delta); // 向下取整
assertEquals(Math.floor(6.2), 6, delta);
assertEquals(Math.floor(6.8), 6, delta);
assertEquals(Math.ceil(-6.2), -6, delta);  // 向上取整
assertEquals(Math.ceil(6.2), 7, delta);
assertEquals(Math.ceil(6.8), 7, delta);
assertEquals(Math.round(-6.2), -6, delta); // 四舍五入
assertEquals(Math.round(6.2), 6, delta);
assertEquals(Math.round(6.8), 7, delta);
assertEquals(Math.round(-6.5), -6, delta);
assertEquals(Math.round(6.5), 7, delta);
assertEquals(Math.rint(-6.2), -6, delta); // 最接近整數(shù),如果存在兩個,返回偶數(shù)
assertEquals(Math.rint(6.2), 6, delta);
assertEquals(Math.rint(6.8), 7, delta);
assertEquals(Math.rint(-6.5), -6, delta);
assertEquals(Math.rint(6.5), 6, delta);

assertEquals(Math.floorDiv(7, 3), 2);
assertEquals(Math.floorDiv(-7, 3), -3);
assertEquals(Math.floorMod(7, 3), 1);
assertEquals(Math.floorMod(-7, -3), -1);
assertEquals(Math.floorMod(-7, 3), 2);
assertEquals(-7 % -3, -1);
assertEquals(-7 % 3, -1);

三角函數(shù)

assertEquals(Math.sin(Math.PI / 2), 1.0, delta);
assertEquals(Math.cos(Math.PI), -1, delta);
assertEquals(Math.tan(Math.PI / 4), 1.0, delta);
assertEquals(Math.asin(1), Math.PI / 2, delta);
assertEquals(Math.acos(-1), Math.PI, delta);
assertEquals(Math.atan(1), Math.PI / 4, delta);

指數(shù)對數(shù)

  • pow(x, y): x^y,x 的 y 次方
  • sqrt(x): √x,x 的平方根
  • cbrt(x): 三次方根
  • hypot(x, y): √(x² + y²)
  • exp(x): e ^ x
  • expm1(x): e ^ x - 1
  • log(x): ln(x)
  • log10: lg(x)
  • log1p(x): ln(1+x)
assertEquals(Math.pow(3, 2), 9, delta);
assertEquals(Math.pow(2, 3), 8, delta);
assertEquals(Math.sqrt(4), 2, delta);
assertEquals(Math.cbrt(27), 3, delta);
assertEquals(Math.hypot(3, 4), 5, delta);  // √(x² + y²)

assertEquals(Math.exp(2.5), Math.pow(Math.E, 2.5), delta); // e ^ x
assertEquals(Math.expm1(2), Math.exp(2) - 1, delta);  // e ^ x - 1
assertEquals(Math.log(Math.exp(1.5)), 1.5, delta); // ln(x)
assertEquals(Math.log10(1000), 3, delta);      // lg(x)
assertEquals(Math.log1p(Math.E - 1), 1, delta);   // ln(1 + x)

雙曲函數(shù)

  • sinh(x): (e ^ x - e ^ -x) / 2
  • cosh(x): (e ^ x + e ^ -x) / 2
  • tanh(x): sinh(x) / cosh(x)
assertEquals(Math.sinh(2), (Math.exp(2) - Math.exp(-2)) / 2, delta);  // sinh(x) = (e ^ x - e ^ -x) / 2
assertEquals(Math.cosh(2), (Math.exp(2) + Math.exp(-2)) / 2, delta);  // cosh(x) = (e ^ x + e ^ -x) / 2
assertEquals(Math.tanh(2), Math.sinh(2) / Math.cosh(2), delta);     // tanh(x) = sinh(x) / cosh(x)

精確計算

普通的數(shù)值計算在溢出時是沒有感知的,比如 Long.MAX_VALUE + 1 將得到結(jié)果 Long.MIN_VALUE,為了解決這種不合理,Math 提供了一些輔助函數(shù),在結(jié)果溢出時將拋出異常

  • addExact(x, y): 加法
  • multiplyExact(x, y): 乘法
  • decrementExact(x, y): 遞減
  • incrementExact(x, y): 遞增
  • negateExact(x, y): 相反數(shù)
  • multiplyFull(x, y): 接受兩個 int 返回一個 long,防止溢出
  • multiplyHigh(x, y): 返回兩個 long 乘積的高 64 位
assertEquals(Long.MAX_VALUE + 1, Long.MIN_VALUE);                    // 溢出
assertThrows(ArithmeticException.class, () -> Math.addExact(Long.MAX_VALUE, 1));    // 加法溢出拋異常
assertThrows(ArithmeticException.class, () -> Math.multiplyExact(Long.MAX_VALUE, 2));  // 乘法
assertThrows(ArithmeticException.class, () -> Math.decrementExact(Long.MIN_VALUE));   // 遞減
assertThrows(ArithmeticException.class, () -> Math.incrementExact(Long.MAX_VALUE));   // 遞增
assertThrows(ArithmeticException.class, () -> Math.negateExact(Long.MIN_VALUE));    // 相反數(shù)
assertEquals(Math.addExact(1, 2), 3);
assertEquals(Math.multiplyExact(2, 3), 6);
assertEquals(Math.incrementExact(6), 7);
assertEquals(Math.decrementExact(6), 5);
assertEquals(Math.negateExact(-6), 6);

assertEquals(Math.multiplyFull(1, 2), 2);  // 接受兩個 int 返回一個 long,防止溢出
assertEquals(Math.multiplyHigh(1, 2), 0);  // 返回兩個 long 乘積的高 64 位

浮點數(shù)

任意兩個浮點數(shù)之間都有無數(shù)個浮點數(shù),因此大部分浮點數(shù)是無法表示的,只能選取一個最接近的,java 提供了一些接口來獲取能表示的浮點數(shù)

System.out.println(Math.nextUp(1.1));  // 下一個浮點數(shù)
System.out.println(Math.nextDown(1.1)); // 上一個浮點數(shù)
System.out.println(Math.nextAfter(1.1, Double.POSITIVE_INFINITY));  // 下一個浮點數(shù)
System.out.println(Math.nextAfter(1.1, Double.NEGATIVE_INFINITY));  // 上一個浮點數(shù)

隨機數(shù)

math 庫隨機數(shù)

System.out.println(Math.random());     // 0 ~ 1 之間的隨機數(shù)

java.lang.Random

Random 類提供了更豐富的隨機方法,可以返回各種不同類型的隨機數(shù)

Random r = new Random();
System.out.println(r.nextInt());
System.out.println(r.nextLong());
System.out.println(r.nextFloat());
System.out.println(r.nextDouble());

Random 還提供了流式 api

Random r = new Random();
List<Integer> li = r.ints().limit(10).boxed().map((x) -> Math.abs(x % 100)).collect(Collectors.toList());
System.out.println(li);

java.util.Random 是線程安全的,但是,跨線程的同時使用 java.util.Random 實例可能會遇到爭用,從而導(dǎo)致性能下降。在多線程設(shè)計中考慮使用java.util.concurrent.ThreadLocalRandom 代替 java.util.Random,ThreadLocalRandom 和 Random 擁有一致的接口

鏈接

Math 測試代碼: https://github.com/hatlonely/hellojava/blob/master/src/test/java/util/MathTest.java
隨機數(shù)測試代碼: https://github.com/hatlonely/hellojava/blob/master/src/test/java/util/RandomTest.java

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用多線程處理未知任務(wù)數(shù)的方案介紹

    Java使用多線程處理未知任務(wù)數(shù)的方案介紹

    這篇文章主要為大家詳細(xì)介紹了Java如何使用多線程實現(xiàn)處理未知任務(wù)數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • SpringMVC源碼解析之消息轉(zhuǎn)換器HttpMessageConverter

    SpringMVC源碼解析之消息轉(zhuǎn)換器HttpMessageConverter

    本篇文章主要介紹了SpringMVC源碼解析之消息轉(zhuǎn)換器HttpMessageConverter ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java NIO和IO的區(qū)別

    Java NIO和IO的區(qū)別

    這篇文章主要介紹了Java NIO和IO的區(qū)別,需要的朋友可以參考下
    2014-06-06
  • 淺談Java動態(tài)代理的實現(xiàn)

    淺談Java動態(tài)代理的實現(xiàn)

    最近,小組同事做代碼改造時,使用到了動態(tài)代理,自己閱讀時,發(fā)現(xiàn)對代理這種設(shè)計模式都不怎么清楚,導(dǎo)致理解代碼也很困難 自己唯一能看懂的,大概就是handler中的invoke方法 ,文中作出了非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-05-05
  • 在SpringBoot環(huán)境中使用Mockito進(jìn)行單元測試的示例詳解

    在SpringBoot環(huán)境中使用Mockito進(jìn)行單元測試的示例詳解

    Mockito特別適用于在Spring Boot環(huán)境中進(jìn)行單元測試,因為它能夠輕松模擬Spring應(yīng)用中的服務(wù)、存儲庫、客戶端和其他組件,通過使用Mockito,開發(fā)者可以模擬外部依賴,從而使單元測試更加獨立和可靠,本文給大家介紹了在Spring Boot環(huán)境中使用Mockito進(jìn)行單元測試
    2024-01-01
  • Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能詳解

    Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能詳解

    這篇文章主要介紹了Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能,較為詳細(xì)的講述了橋接模式的概念、原理并結(jié)合實例形式分析了Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能相關(guān)操作步驟與注意事項,需要的朋友可以參考下
    2018-05-05
  • SpringBoot攔截器使用精講

    SpringBoot攔截器使用精講

    攔截器可以根據(jù) URL 對請求進(jìn)行攔截,主要應(yīng)用于登陸校驗、權(quán)限驗證、亂碼解決、性能監(jiān)控和異常處理等功能上。SpringBoot同樣提供了攔截器功能。 本文將為大家詳細(xì)介紹一下
    2021-12-12
  • MyBatis框架零基礎(chǔ)快速入門案例詳解

    MyBatis框架零基礎(chǔ)快速入門案例詳解

    MyBatis本是apache的一個開源項目iBatis,2010年這個項目由apache?software?foundation遷移到了google?code,并且改名為MyBatis。2013年11月遷移到Github。iBATIS一詞來源于“internet”和“abatis”的組合,是一個基于Java的持久層框架
    2022-04-04
  • SpringCloud超詳細(xì)講解Feign聲明式服務(wù)調(diào)用

    SpringCloud超詳細(xì)講解Feign聲明式服務(wù)調(diào)用

    Feign可以把Rest的請求進(jìn)行隱藏,偽裝成類似Spring?MVC的Controller一樣。不用再自己拼接url,拼接參數(shù)等等操作,一切都交給Feign去做
    2022-06-06
  • Spring Boot整合Swagger2的完整步驟詳解

    Spring Boot整合Swagger2的完整步驟詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot整合Swagger2的完整步驟,文中通過示例代碼將整合的步驟一步步介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07

最新評論

沂水县| 余江县| 白山市| 东光县| 内黄县| 瓮安县| 布尔津县| 泰安市| 紫金县| 奉节县| 南开区| 宁德市| 崇义县| 海林市| 三门县| 泰州市| 镇沅| 阜城县| 太保市| 镇巴县| 昌乐县| 华宁县| 长沙市| 台安县| 宁晋县| 仙桃市| 勃利县| 昭觉县| 逊克县| 青海省| 文山县| 芜湖县| 罗江县| 焉耆| 宣化县| 定日县| 松原市| 玉林市| 民和| 北票市| 衢州市|