对于一些普遍的工作,我必须近似一些数字 - 比如欧拉系列.因此我必须添加非常小的数字,但我的精度有问题.如果数量非常小,则不会影响结果.
real s; //sum of all previous terms
ulong k; //factorial
s += 1.0/ k;
Run Code Online (Sandbox Code Playgroud)
在每一步之后,k变得更小,但在第10轮之后,结果不再变化并且停留在2.71828
我正在寻找一个特定于MSVC++的任意精度库.由于我不需要跨平台兼容性来处理我正在工作的东西,所以我宁愿不要把它弄得一团糟.
我试着看NTL,但在看到" 这些步骤与MSVC++ v6一起工作 " 这样的陈述时,我忍不住将它作为过时的精神埋葬.最新版本: 2009 08 14.
MPIR看起来很有前途(最新版本2011 06 14),这是我迄今为止发现的最好的东西.
有关从MSVC++(本机代码,而不是.NET)执行至少 128位浮点运算的任何建议吗?
鉴于简单的计划
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)
这是输出:
Run Code Online (Sandbox Code Playgroud)0.02127659574468085106382978723404255319148936170213 0.021276595744680851063829787234042553191489361702128 12345678901234567890123456789012345678901234567890 0.16667 0.16667
我希望第二行输出与第一行相同.这是一个错误,还是我误解了BigDecimal文档?
JVM版本:
Run Code Online (Sandbox Code Playgroud)$ 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 …
在 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) Python / C API手册提到了来自“¹”的转换函数。和?²?空指针,这似乎是在C.使用任意长度蟒整数的唯一途径
(1):PyLong_FromVoidPtr()和格式0&与Py_BuildValue()
(2):PyLong_AsVoidPtr()和格式0,0&以及0!与PyArg_…Parse…()
但是,我还没找到吗?³?在手册中,有关如何使用这些空指针在C中使用这些任意长整数执行任何操作的任何说明。
(3):我尝试搜索«voidptr»,«void *»和«0&»,但尚未完全阅读。
我在哪里可以找到有关它们的内部结构或基元的信息以进行计算?
我必须找到非常大的日志.
我在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或C++中有效地执行此操作,而我无法访问进位标志?它应该适用于几个编译器和体系结构,所以我不能简单地使用内联汇编等.
我需要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)
完成这项工作的最快方法是什么?(你的数字应该是均匀分布的).
谢谢!
根据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 result和mpz_init(result)。为什么mpz_init还需要?
我用一些代码解决了以下 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) c++ ×3
c ×2
julia ×2
python ×2
addition ×1
bigdecimal ×1
bigfloat ×1
bignum ×1
carryflag ×1
d ×1
gmp ×1
java ×1
javascript ×1
logarithm ×1
logging ×1
long-integer ×1
precision ×1
python-3.x ×1
random ×1
visual-c++ ×1