正如你们中的一些人可能会注意到这个问题是来自Project Euler的问题16.我已经使用C#4.0的新"bigInt"功能解决了这个问题,这个功能非常简单,但也没有真正学到我应该学到的东西.我假设因为它是2 ^ 1000会有某种位移解决方案,但我无法弄清楚它究竟是如何工作的.
有没有人知道如何在不使用bigint的情况下计算2 ^ 1000?
我正在使用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'文件从头开始创建数据库(在运行测试之前).
对于Erlang或的解决方案C / C++,请转到下面的试验4.
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)
+仅使用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) 我很难理解如何BigInt正确使用.在我看来,应该使用BigInt何时Int64或Int128不够,并且显然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课程作为编程练习.它在base-65536中使用2的补码有符号整数的向量(因此32位乘法不会溢出.一旦我完全工作,我将增加基数).
所有基本的数学运算进行编码,其中一个问题:分裂是痛苦的基本算法,我能够创造慢.(对于商的每个数字,它有点像二进制除法......除非有人想看到它,否则我不会发布它.)
而不是我的慢速算法,我想使用Newton-Raphson找到(移位)倒数然后乘以(和移位).我想我已经掌握了基础知识:你给出公式(x1 = x0(2 - x0*除数))一个很好的初始猜测,然后经过一些迭代后,x收敛到倒数.这部分似乎很容易......但是当我尝试将这个公式应用于大整数时,我遇到了一些问题:
问题1:
因为我正在使用整数......好吧......我不能使用分数.这似乎导致x总是发散(x0*除数似乎必须<2)?我的直觉告诉我应该对方程进行一些修改,使其能够整数运算(达到一定的精度),但我真的很难找出它是什么.(我缺乏数学技能在这里打败了我......)我想我需要找到一些等效的等式而不是d有d*[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) 我真的不知道这里发生了什么.我有一个如下所示的数据库表:

有了这些数据:

当我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被减去一个.我真的不知道发生了什么.我试过放下桌子并重新设置它,有没有人经历过这个?或者知道出了什么问题?这非常令人沮丧!谢谢
我的数据集中有一个列,其数据类型为bigint:
Col1 Col2
1 1519778444938790
2 1520563808877450
3 1519880608427160
4 1520319586578960
5 1519999133096120
Run Code Online (Sandbox Code Playgroud)
如何将Col2转换为以下格式:
年月日hr:mm:ss
我不确定当前列的格式是什么,但我知道它应该是一个时间戳。
任何帮助将是巨大的,谢谢!
要生成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即使是干杯和赫斯,我终于完成了一堂课.- 阿尔夫的解决方案就像一个魅力
假设我想将base-36编码的字符串转换为BigInt,我可以这样做:
BigInt(parseInt(x,36))
Run Code Online (Sandbox Code Playgroud)
但是,如果我的字符串超过了可以安全地容纳在数字中的数字,该怎么办?例如
parseInt('zzzzzzzzzzzzz',36)
Run Code Online (Sandbox Code Playgroud)
然后我开始失去精度。
是否有任何直接解析为的方法BigInt?
对于一种专为科学计算而设计的语言-甚至是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) bigint ×10
algorithm ×2
c++ ×2
mysql ×2
biginteger ×1
bignum ×1
c# ×1
c#-4.0 ×1
c++11 ×1
date ×1
division ×1
erlang ×1
fortran ×1
fortran2018 ×1
integer ×1
javascript ×1
julia ×1
node.js ×1
presto ×1
rest ×1
schema.rb ×1
square-root ×1
std-bitset ×1
time ×1
timestamp ×1