标签: bigint

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

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

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

c# bigint c#-4.0

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

如何使Rails生成'schema.rb'与MySQL的bigint支持?

我正在使用Rails 3.0.5.我使用MySQL作为数据库存储.我有一个模型,其中一列需要是BIGINT.我在创建迁移文件中使用以下内容:

t.column  :my_column_name,       :bigint
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

但是,当我跑

rake db:migrate

生成的'schema.rb'文件为特定列创建以下行:

t.integer  "my_column_name",       :limit => 8
Run Code Online (Sandbox Code Playgroud)

这是不正确的.

我的问题是我错在哪里?为了获得正确的'schema.rb'文件,我应该做些什么吗?我可以更改'schema.rb'文件的生成方式吗?

请注意,'schema.rb'文件错误这一事实会导致我的持续集成服务器出现问题,该服务器运行测试并使用'schema.rb'文件从头开始创建数据库(在运行测试之前).

mysql ruby-on-rails schema.rb bigint

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

一种计算任意大整数的整数平方根(isqrt)的有效算法

注意

对于Erlang或的解决方案C / C++,请转到下面的试验4.


维基百科文章

整数平方根

  • "整数平方根"的定义可以在这里找到

计算平方根的方法

  • 可以在这里找到做"魔术"的算法

[试验1:使用库功能]

isqrt(N) when erlang:is_integer(N), N >= 0 ->
    erlang:trunc(math:sqrt(N)).
Run Code Online (Sandbox Code Playgroud)

问题

此实现使用sqrt()C库中的函数,因此它不适用于任意大整数(请注意,返回的结果与输入不匹配.正确的答案应该是12345678901234567890):

Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> erlang:trunc(math:sqrt(12345678901234567890 * 12345678901234567890)).
12345678901234567168
2> 
Run Code Online (Sandbox Code Playgroud)

[试验2:+仅使用Bigint ]

isqrt2(N) when erlang:is_integer(N), N >= 0 ->
    isqrt2(N, 0, 3, 0).

isqrt2(N, I, _, Result) when I >= N ->
    Result;

isqrt2(N, …
Run Code Online (Sandbox Code Playgroud)

algorithm erlang biginteger bigint square-root

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

了解BigInt的使用

我很难理解如何BigInt正确使用.在我看来,应该使用BigInt何时Int64Int128不够,并且显然BigInt使用任意精度算术(我不知道).

假设我想计算一些大数的阶乘,例如30.我不知道需要存储多少位factorial(30)但两者都要

test = Int128
test = factorial(30)
Run Code Online (Sandbox Code Playgroud)

test = BigInt
test = factorial(30)
Run Code Online (Sandbox Code Playgroud)

产生-8764578968847253504明显不正确的产品.

根据Julia lang文档,似乎通常的数学运算符是为这种类型定义的(BigInt),结果被提升为a BigInt.因此,我没有看到我做错了什么,我显然误解了一些事情.希望你们中的一些人可能对我有一个解释:)

PS:如果有话要说,我正在运行64位版本的Windows 7

bigint julia

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

Newton-Raphson分部与大整数

我正在将BigInt课程作为编程练习.它在base-65536中使用2的补码有符号整数的向量(因此32位乘法不会溢出.一旦我完全工作,我将增加基数).

所有基本的数学运算进行编码,其中一个问题:分裂是痛苦的基本算法,我能够创造慢.(对于商的每个数字,它有点像二进制除法......除非有人想看到它,否则我不会发布它.)

而不是我的慢速算法,我想使用Newton-Raphson找到(移位)倒数然后乘以(和移位).我想我已经掌握了基础知识:你给出公式(x1 = x0(2 - x0*除数))一个很好的初始猜测,然后经过一些迭代后,x收敛到倒数.这部分似乎很容易......但是当我尝试将这个公式应用于大整数时,我遇到了一些问题:

问题1:

因为我正在使用整数......好吧......我不能使用分数.这似乎导致x总是发散(x0*除数似乎必须<2)?我的直觉告诉我应该对方程进行一些修改,使其能够整数运算(达到一定的精度),但我真的很难找出它是什么.(我缺乏数学技能在这里打败了我......)我想我需要找到一些等效的等式而不是dd*[base ^ somePower]?可以有一些方程式(x1 = x0(2 - x0*d))与整数一致吗?

问题2:

当我使用牛顿的公式来找到某些数字的倒数时,结果最终只是一个小部分,低于答案应该是...... ex.当试图找到4的倒数(十进制):

x0 = 0.3
x1 = 0.24
x2 = 0.2496
x3 = 0.24999936
x4 = 0.2499999999983616
x5 = 0.24999999999999999999998926258176
Run Code Online (Sandbox Code Playgroud)

如果我代表基数为10的数字,我希望得到25的结果(并记住将产品右移2).使用一些倒数(例如1/3),您可以在知道足够的准确度后截断结果.但是我怎样才能从上面的结果中得出正确的倒数呢?

对不起,如果这太模糊或者我要求太多了.我查看了维基百科和我在谷歌上可以找到的所有研究论文,但我觉得我正在撞墙.我感谢任何人都能给我的帮助!

...

编辑:算法运行,虽然它比我预期的要慢得多.与我的旧算法相比,我实际上失去了很多速度,即使是数千位的数字......我仍然缺少一些东西.这不是乘法的问题,这是非常快的.(我确实使用Karatsuba的算法).

对于任何感兴趣的人,这是我目前的Newton-Raphson算法的迭代:

bigint operator/(const bigint& lhs, const bigint& rhs) {
    if (rhs == 0) throw overflow_error("Divide by zero exception");
    bigint dividend = lhs;
    bigint divisor = rhs;

    bool negative = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm integer division bigint

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

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
查看次数

在presto中将bigint转换为时间戳

我的数据集中有一个列,其数据类型为bigint:

Col1     Col2
   1     1519778444938790
   2     1520563808877450
   3     1519880608427160
   4     1520319586578960
   5     1519999133096120
Run Code Online (Sandbox Code Playgroud)

如何将Col2转换为以下格式:

年月日hr:mm:ss

我不确定当前列的格式是什么,但我知道它应该是一个时间戳。

任何帮助将是巨大的,谢谢!

time timestamp date bigint presto

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

将74位整数转换为基数31

要生成UFI编号,我使用bitset大小为74.要执行UFI生成的第2步,我需要转换此数字:

9 444 732 987 799 592 368 290
(10000000000000000000000000000101000001000001010000011101011111100010100010)
Run Code Online (Sandbox Code Playgroud)

成:

DFSTTM62QN6DTV1
Run Code Online (Sandbox Code Playgroud)

通过将第一个表示转换为基数31并从表中获取等效的字符.

#define PAYLOAD_SIZE 74
// payload = binary of 9444732987799592368290
std::bitset<PAYLOAD_SIZE> bs_payload(payload);
/*
perform modulo 31 to obtain:
12(D), 14(F), 24(S), 25(T), 25, 19, 6, 2, 22, 20, 6, 12, 25, 27, 1
*/    
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用外部BigInteger库的情况下对我的bitset执行转换?

编辑:BigInteger即使是干杯和赫斯,我终于完成了一堂课.- 阿尔夫的解决方案就像一个魅力

c++ base-conversion bigint c++11 std-bitset

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

以36为底数的BigInt?

假设我想将base-36编码的字符串转换为BigInt,我可以这样做:

BigInt(parseInt(x,36))
Run Code Online (Sandbox Code Playgroud)

但是,如果我的字符串超过了可以安全地容纳在数字中的数字,该怎么办?例如

parseInt('zzzzzzzzzzzzz',36)
Run Code Online (Sandbox Code Playgroud)

然后我开始失去精度。

是否有任何直接解析为的方法BigInt

javascript bigint

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

如何在Fortran中使用bignum

对于一种专为科学计算而设计的语言-甚至是50年前,我惊讶地发现Fortran 2018没有针对bignum或bigInt类型的本机类型以实现任意精度,并且怀疑我做错了什么。这是什么标准流程?

我在想:

program toosmall
  ! compile with:
  ! gfortran -fno-range-check -o toosmall toosmall.f90 

  implicit none

  integer :: base, pow, res

  base = 1000
  pow  = 100000

  res= base**pow

  print *,res

end program toosmall
Run Code Online (Sandbox Code Playgroud)

这产生了

$ ./toosmall 
           0
Run Code Online (Sandbox Code Playgroud)

fortran bignum bigint fortran2018

6
推荐指数
0
解决办法
179
查看次数