标签: arbitrary-precision

如何在D中执行高精度计算?

对于一些普遍的工作,我必须近似一些数字 - 比如欧拉系列.因此我必须添加非常小的数字,但我的精度有问题.如果数量非常小,则不会影响结果.

real s;  //sum of all previous terms
ulong k; //factorial

s += 1.0/ k;
Run Code Online (Sandbox Code Playgroud)

在每一步之后,k变得更小,但在第10轮之后,结果不再变化并且停留在2.71828

floating-point d arbitrary-precision

4
推荐指数
1
解决办法
602
查看次数

MSVC++"官方"任意精度库

我正在寻找一个特定于MSVC++的任意精度库.由于我不需要跨平台兼容性来处理我正在工作的东西,所以我宁愿不要把它弄得一团糟.

我试着看NTL,但在看到" 这些步骤与MSVC++ v6一起工作 " 这样的陈述时,我忍不住将它作为过时的精神埋葬.最新版本: 2009 08 14.

MPIR看起来很有前途(最新版本2011 06 14),这是我迄今为止发现的最好的东西.

有关从MSVC++(本机代码,而不是.NET)执行至少 128位浮点运算的任何建议吗?

visual-c++ arbitrary-precision

4
推荐指数
1
解决办法
1736
查看次数

使用MathContext调用时,BigDecimal.divide()会产生额外的精度数字

鉴于简单的计划

import java.math.*;
import static java.math.BigDecimal.ONE;
import static java.lang.System.out;

public static void main(String[] args) {
    StringBuffer ruler = new StringBuffer("  ");
    for (int i = 0; i < 5; i++) {
         ruler.append("1234567890");
    }

    out.println(ONE.divide(new BigDecimal(47), 50, RoundingMode.HALF_UP));
    out.println(ONE.divide(new BigDecimal(47), new MathContext(50, RoundingMode.HALF_UP)));
    out.println(ruler);
    out.println(ONE.divide(new BigDecimal(6), 5, RoundingMode.HALF_UP));
    out.println(ONE.divide(new BigDecimal(6), new MathContext(5, RoundingMode.HALF_UP)));
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

0.02127659574468085106382978723404255319148936170213
0.021276595744680851063829787234042553191489361702128
  12345678901234567890123456789012345678901234567890
0.16667
0.16667
Run Code Online (Sandbox Code Playgroud)

我希望第二行输出与第一行相同.这是一个错误,还是我误解了BigDecimal文档?

JVM版本:

$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM …
Run Code Online (Sandbox Code Playgroud)

java precision bigdecimal arbitrary-precision

4
推荐指数
1
解决办法
461
查看次数

朱莉娅:BigFloat 正态分布

在 Julia 中,有人实现了正态分布 pdf 或 cdf 来支持任意精度 BigFloats。

例如,此代码返回 0.0,而实际上这些值应该略有不同。

x = parse(BigFloat, "2.1")
x_small = float64(x)
pdf(Normal(), x) - pdf(Normal(), x_small)
Run Code Online (Sandbox Code Playgroud)

arbitrary-precision bigfloat julia

4
推荐指数
1
解决办法
414
查看次数

用c扩展python时,如何处理任意大小的整数?

Python / C API手册提到了来自“¹”的转换函数。和?²?空指针,这似乎是在C.使用任意长度蟒整数的唯一途径
(1):PyLong_FromVoidPtr()和格式0&Py_BuildValue()
(2):PyLong_AsVoidPtr()和格式00&以及0!PyArg_…Parse…()

但是,我还没找到吗?³?在手册中,有关如何使用这些空指针在C中使用这些任意长整数执行任何操作的任何说明。
(3):我尝试搜索«voidptr»,«void *»和«0&»,但尚未完全阅读。

我在哪里可以找到有关它们的内部结构或基元的信息以进行计算?

c python arbitrary-precision python-3.x long-integer

4
推荐指数
1
解决办法
71
查看次数

非常大数的对数

我必须找到非常大的日志.

我在C++中这样做

我已经做了乘法,加法,减法,除法的函数,但是对数存在问题.我不需要代码,我需要一个简单的想法如何使用这些函数来完成它.

谢谢.

PS抱歉,我忘了告诉你:我必须找到该号码的二进制对

PS-2我发现在维基百科:

int floorLog2(unsigned int n) {

if (n == 0)

  return -1;

int pos = 0;

if (n >= (1 <<16)) { n >>= 16; pos += 16; }

if (n >= (1 << 8)) { n >>=  8; pos +=  8; }

if (n >= (1 << 4)) { n >>=  4; pos +=  4; }

if (n >= (1 << 2)) { n >>=  2; pos += …
Run Code Online (Sandbox Code Playgroud)

c++ logging logarithm arbitrary-precision

3
推荐指数
1
解决办法
3083
查看次数

没有进位标志的大整数加法

在汇编语言中,通常有一条指令可以添加两个操作数和一个进位.如果要实现大整数加法,只需添加最小的整数而不带进位,将下一个整数与进位相加.如何在C或C++中有效地执行此操作,而我无法访问进位标志?它应该适用于几个编译器和体系结构,所以我不能简单地使用内联汇编等.

c c++ addition arbitrary-precision carryflag

3
推荐指数
1
解决办法
2395
查看次数

如何获取julia范围内的BigInt随机数?

我需要BigInt在Julia中获得1到1之间的随机数,但我在文档中找不到如何做到这一点.下面的代码是我认为可行的:

julia> rand(BigInt(1):BigInt(2^1000))
ERROR: integer division error
 in randu at random.jl:158
 in rand at random.jl:178
 in rand at random.jl:187
Run Code Online (Sandbox Code Playgroud)

编辑:提到的GregS 2^1000会绕零.实际上,2^1000结果为零,所以上面的代码是错误的.但使用BigInt(2)^1000不起作用:

julia> rand(BigInt(1):BigInt(2)^1000)
ERROR: InexactError()
 in convert at gmp.jl:108
 in colon at range.jl:38

julia> rand(BigInt(1):BigInt(2)^BigInt(1000))
ERROR: InexactError()
 in convert at gmp.jl:108
 in colon at range.jl:38
Run Code Online (Sandbox Code Playgroud)

完成这项工作的最快方法是什么?(你的数字应该是均匀分布的).

谢谢!

random arbitrary-precision julia

3
推荐指数
1
解决办法
524
查看次数

GMP中变量的初始化

根据GMP的手册,“用于整数算术的函数假定所有整数对象均已初始化。您可以通过调用函数mpz_init来实现。”

例如,

int main(){
    mpz_t n1, n2, result;
    mpz_init_set_str(n1, "465860", 10);
    mpz_init_set_str(n2, "167", 10);
    mpz_init(result);
    mpz_mod(result, n1, n2);
    mpz_out_str(stdout, 10, result);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果mpz_init(result);从上面的代码中删除,则编译器将产生分段错误错误。所以,我的问题,究竟是这两个类型定义的区别:mpz_t resultmpz_init(result)。为什么mpz_init还需要?

c++ gmp arbitrary-precision

3
推荐指数
1
解决办法
202
查看次数

node.js 和 python 中相同问题解决方案的不同结果

我用一些代码解决了以下 leetCode 问题:


你有d骰子,每个骰子都有f编号为 1、2、...、f 的面。

返回模 10^9 + 7 的可能方式数来掷骰子,使面朝上的数字总和等于t.


我制作了两个版本的解决方案代码,一个在 node.js 中使用mathjs,另一个在 python 中使用 math 模块。

在 node.js 中

const { combinations: comb, bignumber: Big } = require("mathjs");

function dice(d, f, t) {
    if (t > d * f || t < d) return 0;

    var result = Big(0);
    var i = 0;
    var sign = 1;
    var n = t - 1;
    var k = t - d;

    while …
Run Code Online (Sandbox Code Playgroud)

javascript python bignum combinatorics arbitrary-precision

3
推荐指数
1
解决办法
134
查看次数