JS的大數運算(注意:原生的只支持整數計算!!!)

JS的大數運算(注意:原生的只支持整數計算!!!)

  • 一、JS的大數運算(注意:原生的只支持整數計算!!!)
    • 1. 數字精度限制
    • 2. 大數解決方案
      • 2.1. 使用 BigInt
      • 2.2. 使用第三方庫
    • 3. 總結
    • 4 補充:力扣1922. 統計好數字的數目 (中等) 使用大數運算的例子


一、JS的大數運算(注意:原生的只支持整數計算!!!)

JavaScript 在處理數字時,其默認的數值類型是基于 IEEE 754 標準的雙精度浮點數。這個數值類型有一些限制,特別是在進行大數運算時。以下是 JavaScript 中大數運算的簡單介紹:

1. 數字精度限制

  • 安全整數: JavaScript 支持的安全整數范圍是 (-2^{53} + 1) 到 (2^{53} - 1)(即 Number.MAX_SAFE_INTEGER 的值為 9007199254740991)。超出這個范圍的整數計算可能會出現精度丟失(例如, 9007199254740992 會變成 9007199254740992)。

  • 浮點數問題: 由于浮點數的表示方式,某些小數(如 0.10.2 的和)可能無法精確表示。

2. 大數解決方案

由于上述限制,處理大數運算時,可以考慮以下幾種方案:

2.1. 使用 BigInt

從 ES2020 開始,JavaScript 引入了 BigInt 類型,用于表示任意大小的整數。你可以通過在數字后添加 “n” 來創建 BigInt:

const bigInt1 = BigInt(9007199254740992)
const bigInt2 = 12345678901234567890n // 后綴 "n" 表示 BigInt
const sum = bigInt1 + bigInt2         // 可以進行大數運算
console.log(sum)                       // 輸出: 12345678901234567892nconsole.log(Number(sum))  // 輸出: 12345678901234567892

2.2. 使用第三方庫

如果你需要支持比 BigInt 更廣泛的數值(比如更復雜的數學操作、浮點數等),可以使用大數運算庫,例如:

  • Decimal.js: 支持任意精度的十進制運算,適合處理小數。
  • Big.js: 提供了對大浮點數的高精度運算支持。
  • bignumber.js: 可以處理比較大的數值以及高精度的浮點數運算。

使用示例(以 decimal.js 為例):

const Decimal = require('decimal.js');const a = new Decimal(0.1);
const b = new Decimal(0.2);
const sum = a.plus(b); // 精確計算
console.log(sum.toString()); // 輸出: "0.3"

3. 總結

在 JavaScript 中,大數運算可以通過 BigInt 來實現任意大小的整數 整數 整數!!!計算,或使用第三方庫來處理更復雜的場景(如浮點數和高精度計算)。在處理大數運算時,需要注意原生數值類型的限制,以確保計算的準確性。

4 補充:力扣1922. 統計好數字的數目 (中等) 使用大數運算的例子

鏈接:csdn鏈接–作者暫未提供
鏈接:力扣本題鏈接

代碼如下:

/*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 此題無法使用暴力算法const MOD = BigInt(10 ** 9 + 7)// ai得到的邏輯思維:// 一個長度為n的字符串,偶數位置可以有02468五種選擇,奇數位置可以有2357四種選擇// 因此對其進行排列組合,可以得到好數字的個數一共是 (符合偶數位置的數字的個數 * 符合奇數位置的數字的個數)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = BigInt(Math.ceil(n / 2)) // 偶數下標的數量const oddCount = BigInt(Math.floor(n / 2)) // 奇數下標的數量const count = (Fuhe(5n, evenCount, MOD) * Fuhe(4n, oddCount, MOD)) % MODreturn Number(count)
}// 快速冪運算的函數實現
const Fuhe = ( a, b, mod ) => {let ans = 1na = a % modwhile(b) {if( b & 1n) ans = (a * ans) % moda = (a * a) % modb >>= 1n}return ans
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78862.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 之美國關稅問題導致 GitHub 403 無法正常訪問,責任在誰?

這幾天各國關稅問題導致世界動蕩不安,如今GitHub又無法正常訪問,是不是Google到時候也無法正常使用了。

JAVA中正則表達式的入門與使用

JAVA中正則表達式的入門與使用 一,基礎概念 正則表達式(Regex) 用于匹配字符串中的特定模式,Java 中通過 java.util.regex 包實現,核心類為: Pattern:編譯后的正則表達式對象。 Matcher&#…

Prompt_Engineering提示詞工程(一)

一、Prompt(提示詞) Prompt(提示詞)是給AI模型交互文本片段,用于指導模型生成符合預期輸出結果,提示詞的目的是為模型提供一個上下文的任務,以便模型能夠更準確地理解用戶的意圖,并…

【設計模式】面向對象開發學習OOPC

PLOOC-裸機思維 PLOOC-git OOPC精要——撩開“對象”的神秘面紗 C/C面向對象編程之封裝-KK 面向過程,本質是“順序,循環,分支”面向對象,本質是“繼承,封裝,多態”參考的書籍:《UMLOOPC嵌入式…

軟考高級--案例分析

架構風格 重點 交互方式數據結構控制結構擴展方法 分類 管道-過濾器風格 數據流 數據倉儲風格 星型結構以數據為中心,其他構件圍繞數據進行交互 企業服務總線esb 定義 以一個服務總線充當中間件的角色,把各方服務對接起來,所有服務…

01_背包問題

package org.josh; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); // 物品數量 long w scanner.nextLong(); // 背包容量,使用long防止溢出 int[] v …

esp32-idf Linux 環境安裝教程

一、提前說明 1. 系統環境 Ubuntu22.04 2. 適配芯片 ESP32S3 3. idf版本 v5.4.1(截止2025年4月13日為最新版本) 二、安裝步驟 1. 安裝前置依賴 sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev l…

JavaScript 輸入輸出語句

在JavaScript中,輸入和輸出是與用戶交互的基礎。無論是從用戶那里獲取信息還是向用戶展示結果,正確使用輸入輸出語句都是至關重要的。本文將詳細介紹JavaScript中常用的輸入輸出方法及其應用場景。 一、輸出語句 (一)console.lo…

TCP 如何在網絡 “江湖” 立威建交?

一、特點: (一)面向連接 在進行數據傳輸之前,TCP 需要在發送方和接收方之間建立一條邏輯連接。這一過程類似于打電話,雙方在通話前需要先撥號建立連接。建立連接的過程通過三次握手來完成,確保通信雙方都…

文章記單詞 | 第29篇(六級)

一,單詞釋義 AI /?e? ?a?/ abbr. 人工智能(Artificial Intelligence)inventory /??nv?ntri/ n. 存貨清單;財產清單;庫存貨物;存貨;v. 編制目錄;開列清單;盤存cha…

【C#】.NET 8適配器模式實戰:用C#實現高可用系統集成與接口橋接藝術

系統集成挑戰與適配器模式的價值 當需要整合不同架構或API的系統時,接口兼容性問題往往成為攔路虎。**適配器設計模式(Adapter Pattern)**通過轉換接口形態,完美解決這種不兼容性問題。本文將通過C# .NET 8實戰演示適配器模式的基…

Nginx基礎到全面掌握高性能Web服務核心

目錄 前言 第一部分:Nginx基礎入門 1.1 什么是Nginx? 1.2 Nginx的典型應用場景 第二部分:Nginx安裝與部署 2.1 在不同操作系統上安裝Nginx 2.2 驗證安裝與基本操作 第三部分:Nginx配置詳解 3.1 核心配置文件解析 3.2 虛…

C語言中while的相關題目

一、題目引入 以下程序中,while循環的循環次數是多少次? 二、代碼分析 首先要明確的一點 while循環是當循環條件為真 就會一直循環 不會停止 while中i是小于10的 說明i可以取到0 1 2 3 4 5 6 7 8 9 進入第一個if判斷i小于1為真時執行continue i0是為真的 執行continue 后…

idea 創建 maven-scala項目

文章目錄 idea 創建 maven-scala項目1、創建普通maven項目并且配置pom.xml文件2、修改項目結構1)創建scala目錄并標記成【源目錄】2)導入scala環境3)測試環境 idea 創建 maven-scala項目 1、創建普通maven項目并且配置pom.xml文件 maven依賴…

微服務之間調用外鍵“翻譯”的方法概述

寫在前面的話&#xff1a;減少strean流操作&#xff0c;減少多層嵌套for循環。使用普通for循環和map的方式進行轉換&#xff0c; 第一步查詢數據 List<Student> findList studentDao.findList(findMap); 第二步準備遍歷和賦值 if(CollectionUtil.isNotEmpty(findLis…

Spring Boot 中集成 Disruptor_高性能事件處理框架

1. 引言 1.1 什么是 Disruptor Disruptor 是一個高性能的事件處理框架,廣泛應用于金融交易系統、日志記錄、消息隊列等領域。它通過無鎖機制和環形緩沖區(Ring Buffer)實現高效的事件處理,具有極低的延遲和高吞吐量的特點。 1.2 為什么使用 Disruptor 高性能:通過無鎖機…

Java中equals與 “==” 的區別

首先我們要掌握基本數據類型和引用類型的概念 基本數據類型&#xff1a; byte&#xff0c;short&#xff0c;int,long,float,double,boolean,char 基本的八大數據類型都各自封裝著包裝類&#xff0c;提供了更多的方法&#xff0c;并且都是引言類型 引用類型&#xff1a; 引…

青少年編程與數學 02-016 Python數據結構與算法 11課題、分治

青少年編程與數學 02-016 Python數據結構與算法 11課題、分治 一、分治算法的基本原理二、分治算法的實現步驟快速排序算法代碼示例&#xff08;Python&#xff09; 三、分治算法的復雜度分析四、分治算法的優缺點優點&#xff1a;缺點&#xff1a; 五、分治算法的應用&#xf…

RFID技術概覽

一、RFID技術定義 RFID&#xff08;Radio Frequency Identification&#xff0c;射頻識別&#xff09; 是一種通過無線電信號識別目標對象并獲取相關數據的非接觸式自動識別技術。它利用射頻信號的空間耦合&#xff08;電感或電磁耦合&#xff09;實現無物理接觸的信息傳遞與目…

【C++游戲引擎開發】第13篇:光照模型與Phong基礎實現

一、Phong模型數學原理 1.1 光照疊加公式 L = k a I a + k d I d max ? ( 0 , n ? l ) + k s I s max ? ( 0 , r ? v ) α L = k_a I_a + k_d I_d \max(0, \mathbf{n} \cdot \mathbf{l}) + k_s I_s \max(0, \mathbf{r} \cdot \mathbf{v})^\alpha L=ka?Ia?+kd?Id?max(0…