标签: bigint

C#中bigint的等价物是什么?

我在处理C#中的值时应该使用什么,这对于SQL Server数据库来说是个bigint?

.net c# sql-server bigint

198
推荐指数
5
解决办法
20万
查看次数

Rust的128位整数“ i128”如何在64位系统上工作?

Rust具有128位整数,这些整数用数据类型表示i128u128对于无符号整数):

let a: i128 = 170141183460469231731687303715884105727;
Run Code Online (Sandbox Code Playgroud)

Rust如何使这些i128值在64位系统上工作?例如,如何对这些进行算术运算?

据我所知,既然该值不能容纳在x86-64 CPU的一个寄存器中,那么编译器是否会以某种方式使用2个寄存器i128?还是他们改用某种大整数结构来表示它们?

x86-64 int128 bigint rust llvm-codegen

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

如何将bigint字段格式化为Postgresql中的日期?

我有一个bigint类型的表.该字段存储时间戳.我希望日期格式化这样的字段:

to_char( bigint_field,'DD/MM/YYYY HH24:MI:SS')

我收到以下错误:

ERROR: multiple decimal points
État SQL :42601

sql postgresql timestamp date bigint

43
推荐指数
3
解决办法
4万
查看次数

求和INT时的算术溢出错误,如何将其转换为BIGINT?

当我尝试从表中获取列的总和时,我得到了错误,Arithmetic overflow error converting expression to data type int因为对于INT,结果数是大的.所以我尝试使用以下内容CAST到BIGINT

SELECT CAST(SUM(columnname) AS BIGINT) FROM tablename
Run Code Online (Sandbox Code Playgroud)

这给了我同样的错误.我有什么想法吗?

sql sql-server math casting bigint

42
推荐指数
1
解决办法
5万
查看次数

使用进位标志进行高效的128位加法

我在我的C++代码的内部循环中使用了128位整数计数器.(不相关背景:实际应用是评估规则网格上的有限差分方程,其中涉及重复递增大整数,甚至64位也不够精确,因为小的舍入累积足以影响答案.)

我将整数表示为两个64位无符号长整数.我现在需要将这些值递增128位常数.这并不难,但你必须手动捕捉低字到高字的进位.

我有这样的工作代码:

inline void increment128(unsigned long &hiWord, unsigned long &loWord)
  {
    const unsigned long hiAdd=0x0000062DE49B5241;
    const unsigned long loAdd=0x85DC198BCDD714BA;

    loWord += loAdd;
    if (loWord < loAdd) ++hiWord; // test_and_add_carry
    hiWord += hiAdd;
  }
Run Code Online (Sandbox Code Playgroud)

这是一个紧凑而简单的代码.有用.

不幸的是,这大约是我运行时的20%.这条杀手线就是低价测试.如果我删除它,我显然得到了错误的答案,但运行时开销从20%下降到4%!因此携带测试特别昂贵!

我的问题:C++是否公开了硬件进位标志,即使是作为GCC的扩展?如果实际编译的指令使用最后一个进位指令进行添加,似乎可以在没有上面的测试和添加进位线的情况下完成添加.有没有办法重写test-and-add-carry行以使编译器使用内部操作码?

c++ assembly gcc bigint carryflag

39
推荐指数
2
解决办法
8350
查看次数

gcc中有128位整数吗?

我想要一个128位整数,因为我想存储两个64位数的乘法结果.在gcc 4.4及以上版本中有没有这样的东西?

c gcc x86-64 bigint 128-bit

39
推荐指数
3
解决办法
6万
查看次数

BigInt 的对数

有没有办法在 JavaScript 中获取BigInt的对数?

对于普通数字,您可以使用以下代码:

const largeNumber = 1000;
const result = Math.log(largeNumber);
Run Code Online (Sandbox Code Playgroud)

但是,我需要使用阶乘数字,可能高于 170!,因此常规数字类型不起作用。Math.log不适用于 BigInt。那么如何得到对数呢?

const largeNumber = BigInt(1000);
const result = ???
Run Code Online (Sandbox Code Playgroud)

javascript logarithm biginteger bigint

39
推荐指数
2
解决办法
4325
查看次数

如何在Rails应用程序中使用long id?

如何更改ActiveRecord ID的(默认)类型?int不够长,我宁愿长.令我感到惊讶的是,没有:迁移很久 - 是否只使用一些小数?

int activerecord ruby-on-rails bigint long-integer

38
推荐指数
5
解决办法
4万
查看次数

关于ADC -1(0xFFFFFFFF)有什么特别之处吗?

在我的一个研究项目中,我正在编写C ++代码。但是,生成的程序集是项目的关键点之一。C ++不提供对标志操作指令的直接访问,特别是对C ++,ADC但只要编译器足够聪明地使用它,这就不成问题。考虑:

constexpr unsigned X = 0;

unsigned f1(unsigned a, unsigned b) {
    b += a;
    unsigned c = b < a;
    return c + b + X;
}
Run Code Online (Sandbox Code Playgroud)

Variable c是一种变通方法,可让我掌握进位标志并将其添加到b和中X。看起来我很幸运,(g++ -O3,版本9.1)生成的代码是这样的:

f1(unsigned int, unsigned int):
 add %edi,%esi
 mov %esi,%eax
 adc $0x0,%eax
 retq 
Run Code Online (Sandbox Code Playgroud)

对于X我测试过的所有值,代码均与上面相同(当然,立即$0x0更改的立即值除外)。但我发现了一个例外:何时X == -1(或0xFFFFFFFFu~0u,...的拼写方式并不重要)生成的代码为:

f1(unsigned int, unsigned int):
 xor %eax,%eax
 add %edi,%esi
 setb %al
 lea -0x1(%rsi,%rax,1),%eax
 retq …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly gcc bigint

38
推荐指数
1
解决办法
1672
查看次数

PowerShell 和 C# 中的 BigInt 不一致

根据微软文档[BigInt]数据类型似乎没有定义的最大值,理论上可以容纳无限大的数字,但我发现在第 28 位之后,一些奇怪的事情开始发生:

PS C:\Users\Neko> [BigInt]9999999999999999999999999999
9999999999999999999999999999
PS C:\Users\Neko> [BigInt]99999999999999999999999999999
99999999999999991433150857216
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在第一个命令1 上BigInt按预期工作,但是还有一个数字,它转换99999999999999999999999999999为的地方似乎发生了一些衰减,99999999999999991433150857216但是,提示不会引发任何错误,您可以继续添加更多数字,直到第 310 个数字

PS C:\Users\Neko> [BigInt]99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
100000000000000001097906362944045541740492309677311846336810682903157585404911491537163328978494688899061249669721172515611590283743140088328307009198146046031271664502933027185697489699588559043338384466165001178426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336
PS C:\Users\Neko\> [BigInt]999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Run Code Online (Sandbox Code Playgroud)

这将抛出错误

At line:1 char:318
+ ... 999999999999999999999999999999999999999999999999999999999999999999999
+                                                                          ~
The numeric constant 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 is not valid.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : BadNumericConstant
Run Code Online (Sandbox Code Playgroud)

我认为这是一个控制台问题而不是一个BigInt问题,因为错误没有提到[BigInt]数据类型,不像其他数据类型的数字太大

PS C:\Users\Neko> [UInt64]18446744073709551615
18446744073709551615
PS C:\Users\Neko> [UInt64]18446744073709551616
Cannot convert value "18446744073709551616" to …
Run Code Online (Sandbox Code Playgroud)

c# powershell bigint .net-core

36
推荐指数
3
解决办法
1426
查看次数