标签: bigint

如何在 JavaScript 中从 BigInt 中获取数字?

我正在研究项目 Euler Problem 104的问题 n\xc2\xb0104并想用 javascript 来完成。

\n\n

为了解决这个问题,我需要计算斐波那契序列的大值,但是这个序列产生的数字太大,无法用经典的 Number 处理,所以我使用最新版本的 javascript 支持的 BigInt。

\n\n

一旦我将特定结果存储在 BigInt 中,我需要检查它的前 10 位和最后一位数字。

\n\n
\n\n

为了从 Number 中获取数字,我们通常会执行如下代码所示的操作,但是当数字变得非常大时,就会出现问题:

\n\n

\r\n
\r\n
let number = BigInt(123456789)\r\nconsole.log(number.toString())\r\nconsole.log(number.toString()[3]) // Result is fine\r\n\r\nlet bigNumber = BigInt(1234567891111111111111111111111111111)\r\nconsole.log(bigNumber.toString())\r\nconsole.log(bigNumber.toString()[30]) // unpredictable result
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

似乎“toString()”方法仅使用 Number 类型的精度(我相信是 2^53),因此我们很快就会失去 BigInt 数字最后一位数字的精度。问题是我找不到其他方法来提取这些数字。

\n\n

编辑: \n我需要完美的精度,因为基本上我正在做的事情是:

\n\n

计算斐波那契(500) = 280571172992510140037611932413038677189525

\n\n

获取该数字的最后 10 位数字:8677189525(这是丢失精度的地方)

\n\n

然后为了解决我的问题,我需要检查最后 10 位数字是否包含从 1 到 9 的所有数字

\n

javascript bigint

7
推荐指数
1
解决办法
1188
查看次数

是否可以在 Rust 中获得整数的本机 CPU 大小?

为了好玩,我正在用 Rust 编写一个 bignum 库。我的目标(与大多数 bignum 库一样)是尽可能提高效率。我希望它即使在不寻常的架构上也能高效。

在我看来,CPU 将在具有架构的本机位数的整数上更快地执行算术运算(即,u64对于 64 位机器,u16对于 16 位机器等)因此,因为我想创建一个在所有架构上都有效的库,我需要考虑目标架构的本机整数大小。这样做的明显方法是使用cfg 属性 target_pointer_width。例如,定义最小的类型,它总是能够容纳超过最大原生 int 大小:

#[cfg(target_pointer_width = "16")]
type LargeInt = u32;

#[cfg(target_pointer_width = "32")]
type LargeInt = u64;

#[cfg(target_pointer_width = "64")]
type LargeInt = u128;
Run Code Online (Sandbox Code Playgroud)

但是,在调查此问题时,我遇到了此评论。它给出了一个架构示例,其中原生 int 大小与指针宽度不同。因此,我的解决方案不适用于所有架构。另一个潜在的解决方案是编写一个构建脚本,它编码一个LargeInt基于 a 的大小定义的小模块usize(我们可以像这样获取:)std::mem::size_of::<usize>()但是,这与上面有相同的问题,因为usize它基于指针宽度以及。最后一个明显的解决方案是简单地为每个架构保留一个本地 int 大小的映射。但是,此解决方案不够优雅且无法很好地扩展,因此我想避免使用它。

所以,我的问题是:有没有办法找到目标的本机 int 大小,最好在编译之前,以减少运行时开销?这种努力是否值得?也就是说,使用本机 int 大小与指针宽度之间是否可能存在显着差异?

optimization cpu-architecture bigint rust

7
推荐指数
1
解决办法
316
查看次数

GPU 上的任意精度整数

我目前正在对大量数字(最多 10M 位)进行素性测试。

现在,我正在使用带有 GMP 库的 ac 程序。我使用 OpenMP 进行了一些并行化,并获得了不错的加速(4 核时为 3.5~)。问题是我没有足够的 CPU 核心来运行我的整个数据集。

我有一个 NVidia GPU,并且我试图找到 GMP 的替代方案,但适用于 GPU。它可以是 CUDA 或 OpenCL。

是否有可以在我的 GPU 上运行的任意精度库?如果有一种简单或更优雅的方法,我也愿意使用另一种编程语言。

bigint arbitrary-precision

7
推荐指数
1
解决办法
1696
查看次数

AddressSanitizer:boost cpp_int 上的堆栈缓冲区溢出

我有以下应该转换std::array<uint8_t>BigIntie 的代码示例boost::multiprecision::cpp_int。我使用 MSYS2 中的 clang64 15.0.7 (\xd0\xa1++17) 编译此代码。代码工作正常并将 uint8_t 数组转换为 BigInt。

\n
#include <string>\n#include <iostream>\n#include <boost/multiprecision/cpp_int.hpp>\n\nusing BigInt = boost::multiprecision::cpp_int;\n\nconst auto b = std::array<uint8_t, 16>{\n    0x11, 0x22, 0x33, 0x44,\n    0x11, 0x22, 0x33, 0x44,\n    0x11, 0x22, 0x33, 0x44,\n    0x11, 0x22, 0x33, 0x44\n};\n\nint main() {\n    size_t shift = 0;\n    auto initial = BigInt{};\n\n    auto i = std::accumulate(\n            b.cbegin(),\n            b.cend(),\n            initial,\n            [&shift](const BigInt &acc, uint8_t it) {\n                auto byte = BigInt{it};\n                auto result = acc | (byte << …
Run Code Online (Sandbox Code Playgroud)

c++ gcc boost clang bigint

7
推荐指数
1
解决办法
535
查看次数

不使用BigInt计算为2 ^ 1000的总和

正如你们中的一些人可能会注意到这个问题是来自Project Euler的问题16.我已经使用C#4.0的新"bigInt"功能解决了这个问题,这个功能非常简单,但也没有真正学到我应该学到的东西.我假设因为它是2 ^ 1000会有某种位移解决方案,但我无法弄清楚它究竟是如何工作的.

有没有人知道如何在不使用bigint的情况下计算2 ^ 1000?

c# bigint c#-4.0

6
推荐指数
1
解决办法
2930
查看次数

用大整数推广js

我有一个用Node JS编写的应用程序,并使用Sequelize js ORM库来访问我的数据库MySql.

我的问题是我的数据库中有一个列是BIGINT,当它的值很大时,我检索它时会得到错误的值.

例如,当在数据库中的值是:10205918797953057我得到的10205918797953056,当我使用sequelize得到它.

我尝试使用big-integer图书馆,但我没有运气.

欢迎任何建议.

PS:我无法将数据类型更改为VARCHAR.

bigint node.js sequelize.js

6
推荐指数
1
解决办法
2203
查看次数

Mysql返回错误的bigint结果,非常奇怪的错误

我真的不知道这里发生了什么.我有一个如下所示的数据库表:

在此输入图像描述

有了这些数据:

在此输入图像描述

当我SELECT * FROM game WHERE id = 4在phpmyadmin中运行此查询时,我按预期返回此结果:

在此输入图像描述

但是当我通过rest api(其中gameId = 4)对它进行查询时

var query = connection.query("SELECT * FROM game WHERE id = ? ",[game.gameId],function(err,rows){ 
Run Code Online (Sandbox Code Playgroud)

我得到了这个结果

在此输入图像描述

由于某种原因,adminId被减去一个.我真的不知道发生了什么.我试过放下桌子并重新设置它,有没有人经历过这个?或者知道出了什么问题?这非常令人沮丧!谢谢

mysql rest bigint node.js

6
推荐指数
1
解决办法
2439
查看次数

如何使用 GraphQL 处理 long Int?

如您所知,GraphQL 没有像 long int 这样的数据类型。因此,每当数字像 一样大时10000000000,它就会抛出这样的错误:Int cannot represent non 32-bit signed integer value: 1000000000000

为此,我知道两种解决方案:

  1. 使用标量。
import { GraphQLScalarType } from 'graphql';
import { makeExecutableSchema } from '@graphql-tools/schema';

const myCustomScalarType = new GraphQLScalarType({
  name: 'MyCustomScalar',
  description: 'Description of my custom scalar type',
  serialize(value) {
    let result;
    return result;
  },
  parseValue(value) {
    let result;
    return result;
  },
  parseLiteral(ast) {
    switch (ast.kind) {
    }
  }
});

const schemaString = `

scalar MyCustomScalar

type Foo {
  aField: MyCustomScalar
}

type …
Run Code Online (Sandbox Code Playgroud)

javascript bigint node.js graphql

6
推荐指数
2
解决办法
9798
查看次数

如何在 JavaScript 中检查数字是否为 BigInt

我想检查一个数字是否是可接受大小的 BigInt if 语句

我知道有解决方案

function isBigInt(x) {
    try {
        return BigInt(x) === x; // dont use == because 7 == 7n but 7 !== 7n
    } catch(error) {
        return false; // conversion to BigInt failed, surely it is not a BigInt
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想直接在我的 if 语句中实现测试,而不是在我的函数中
有人可以帮助我吗?

javascript bigint

6
推荐指数
1
解决办法
6049
查看次数

32 位平台上的无符号 64x64-&gt;128 位整数乘法

在探索活动的背景下,我开始研究 32 位平台的整数和定点算术构建块。我的主要目标是 ARM32(特别是 ARM32 armv7),同时关注 RISC-V32,我预计 RISC-V32 在嵌入式领域的重要性会不断提高。我选择检查的第一个示例构建块是无符号 64x64->128 位整数乘法。本网站上有关此构建块的其他问题未提供 32 位平台的详细介绍。

在过去的三十年里,我多次实现了这个和其他算术构建块,但总是使用汇编语言,用于各种体系结构。然而,此时我的希望和愿望是这些可以直接用 ISO-C 进行编程,而不使用内在函数。理想情况下,单一版本的 C 代码将生成跨架构的良好机器代码。我知道操纵 HLL 代码来控制机器代码的方法通常很脆弱,但希望处理器架构和工具链已经足够成熟,使之变得可行。

汇编语言实现中使用的一些方法不太适合移植到 C。在下面的示例代码中,我选择了似乎适合 HLL 实现的六个变体。除了生成所有变体所共有的部分积之外,两种基本方法是: (1) 使用 64 位算术对部分积求和,让编译器负责 32 位半部分之间的进位传播。在这种情况下,有多种选择对部分乘积求和的顺序。(2) 使用32位运算进行求和,直接模拟进位标志。在这种情况下,我们可以选择在加法之后 ( a = a + b; carry = a < b;) 或加法之前 ( carry = ~a < b; a = a + b;) 生成进位。下面的变体 1 到 3 属于前一类,变体 5 和 6 属于后者。

Compiler Explorer中,我专注于感兴趣平台的工具链 gcc 12.2 和 clang 15.0。我用 编译-O3。总体发现是,平均而言,clang 生成的代码比 gcc …

c arm micro-optimization bigint riscv32

6
推荐指数
1
解决办法
456
查看次数