问题标签 [uint64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
167 浏览

.net - 对于 N < 2^63 的素数分解算法,用 UInt64 替换 BigInteger

对于使用Pollard 的 Rho 和 Brent 的算法在 VB.Net 中使用 BigInteger 实现的素数分解,我有一个很好的解决方案(请参阅:https ://stackoverflow.com/a/31978350/44080 )

因为N< 2^63我相信UInt64应该足够大,并且可能(很多?)更快。

但是我的UInt64转换在这一行失败:

将此行更改为

y = CULng((CDbl(y^2) Mod n + c) Mod n)

由于类型转换处于循环中,因此会降低性能。

请问我该如何解决这个问题?

如果我们能绕过上述问题,我仍然认为 UInt64 将胜过 BigInteger。

编辑:

我刚刚发现了这个:Dirichlet .NET Number Theory Library,它声称 Int128 和 Int256 的性能优于 .Net BigInteger。

它甚至有几个优化的素数分解算法。本可以为我节省 2 天的研究和测试时间。

0 投票
1 回答
1188 浏览

java - 如何在 Objective-C 中将字节数组转换为 UInt64

到目前为止,这是我将收到的 8 个字节转换为 UInt64 所做的工作:

将数据转换为 8 字节数据的发送方是这​​样做的:

我收到的 8 字节数据数据是:

01 00 00 00 00 00 00 3b

我的方法的输出是:

16777216

我尝试使用计算器将这个“16777216”转换为字节,我得到:

01 00 00 00 00 00 00

这意味着 3b 不包括在转换中。

但是,我在java下尝试了这段代码,它工作正常。我不知道问题出在哪里。

请帮忙。提前致谢!

0 投票
1 回答
86 浏览

ocaml - 使用带有 OCaml 的 uint 包 - opam

我刚刚安装了opam并安装了 uint 包。但是,当我尝试做这样的事情时

我得到错误

关于我可能遗漏的任何建议?我是 OCaml 和 opam 的新手

我使用以下语句在我的 OSX 终端中编译代码

0 投票
2 回答
776 浏览

javascript - Uint8Array(8) 字符串化

由于 IEEE 754,我无法将无符号 64 位整数从后端获取到 ArrayBuffer 中,因此我无法将此序列作为数字获取并保留。有什么方法可以“字符串化”这个庞大的数字吗?

简而言之:

先感谢您。

0 投票
1 回答
371 浏览

c - 为什么 uint64_t 的高 32 位在执行特定的按位运算时变为 1?

有人可以向我解释一下为什么在 #2 的情况下 a 的高 32 位uint64_t设置为 1:

输出:

https://ideone.com/xKUaTe

你会注意到我给出了一个“等效”的 32 位版本(案例 #3 和 #4),它没有表现出相同的行为......

0 投票
1 回答
132 浏览

c - C for 循环几乎正确

我正在研究一个家庭作业问题,涉及将递归解决方案与其迭代对应物进行比较。目前我的递归函数适用于给定的一组值,但是迭代版本似乎适用于除最后一个值之外的每个值,这对我来说似乎很奇怪。

迭代函数如下

其他相关信息是

当我运行递归函数时,我得到了我与其他同学确认的最终值的答案 424171147。我只是对为什么该算法适用于所有以前的值而不是最后一个值感到困惑。非常感谢任何和所有帮助。

附带说明:我知道迭代版本非常低效,这就是分配的重点。

这里要求的是递归函数

n 在声明时也被初始化为 1。

0 投票
1 回答
1701 浏览

c++ - 如何与 numeric_limits 进行比较::分钟()

考虑符号 (+1-1) 是已知的,并且有一个解析无符号整数的代码。该无符号整数可以等于-numeric_limits<int64_t>::max()。如何在不触发未定义行为的情况下正确比较?

0 投票
2 回答
2406 浏览

objective-c - Swift 转换 C 的 uint64_t 不同于它使用自己的 UInt64 类型

我正在将应用程序从 (Objective-)C 移植到 Swift,但必须使用用 C 编写的第三方框架。有一些不兼容之处,例如 typedef,它们被解释为 Int,但必须传递给框架的功能作为 UInts 或类似的。因此,为了避免在整个 Swift 应用程序中进行持续的转换操作,我决定将 C 头文件传输到 Swift,将所有类型作为 II 需要它们放在一个位置。

我能够转移几乎所有东西并克服了很多障碍,但是这个:

C 标头定义了一个结构,其中包含一个 uint64_t 变量等。该结构用于将数据作为指针传输到回调函数。回调函数将 void 指针作为参数,我必须使用 UnsafeMutablePointer 操作将其强制转换为结构的类型(或如果合适,则为标头的另一个结构)。只要我使用由 Swift 在导入时自动转换的 C 标头中的原始结构,所有转换和内存访问都可以正常工作。

然而,在 Swift 中手动复制结构并不“适合字节”。

让我向您展示这种情况的简化示例:

在 CApiHeader.h 文件里面有类似

据我了解,这里应该是 Swift 等价物

或者这个元组符号也应该起作用

这可以正常工作,但只要有 UInt64 类型就不会。

好的,那会发生什么?

将指针转换为我自己的 Swift MyStruct 实现之一,孔数据从 UInt64 字段开始移动了 2 个字节。所以在这个例子中,两个arr字段都不在正确的位置,而是在 UInt64 位内,应该是 64 位。因此,UInt64 字段似乎只有 48 位。

这符合我的观察,如果我用这个替代替换 UIn64 变量

或者这个

(或等效的元组表示法)它正确对齐arr字段。但是你可以很容易地猜到var02包含不直接可用的数据,因为它被分割成多个地址范围。第一种选择更糟糕,因为它缝合了 Swift 用 16 位填充了保留字段和var02字段之间的间隙——我上面提到的丢失/移位的 2 个字节——但这些并不容易访问。

所以我还没有想出 Swift 中 C 结构的任何等效转换。

这里到底发生了什么,Swift 如何从 C 标头转换结构?

请问你们对我有提示或解释甚至解决方案吗?

更新

C 框架有一个带有这个签名的 API 函数:

MessageHandlerProc 是过程类型:

所以 setHandlers 是框架内的一个 C 过程,它获取一个指向回调函数的指针。这个回调函数必须提供一个 void 指针的参数,它被强制转换为例如

Swift 足够聪明,可以使用约定(c)语法导入 messageHandlerProc,因此过程类型是直接可用的。另一方面,不可能使用标准的 func 语法并将我的 messageHandler 回调函数比特转换为这种类型。所以我使用闭包语法来定义回调函数:

我将上述结构转换为原始帖子的不同结构。

和不!将stats定义为 Swift Array 不起作用。Swift 中的 Array 不等同于 C 中的 Array,因为 Swift 的 Array 是扩展类型。使用指针写入和读取它会导致异常

在此处输入图像描述

只有元组是在 Swift 中原生实现的,你可以用指针在它上面来回运行。

好的......这一切都很好,只要数据可用,我的回调函数就会被调用。

因此,在myMessageHandler中,我想使用msgArgPtr中存储的数据,它是一个 void 指针,因此必须转换为DeviceState

像这样访问状态

每当我使用DeviceState的自动生成的 Swift 挂件时,它都能很好地工作。time 变量具有 Unix 时间戳,并且以下统计信息(可使用元组语法访问!!!)都是它们所属的位置。

然而,使用我手动实现的结构会导致完全没有意义的时间戳值,并且统计字段向左移动(朝向时间字段 - 这可能是时间戳值无用的原因,因为它包含来自统计“数组”的位) . 因此,在最后两个统计字段中,我从 CompoundValueOld 获取和第一个字段中获取值 - 当然所有溢出。

只要我愿意牺牲时间值并通过两个 UInt32 类型的元组或通过将其更改为 UInt32 类型并在时间之前添加 UInt16 类型的辅助变量来更改 UInt64 变量之前添加 UInt16 类型的辅助变量来更改 UInt64 变量,我就会收到一个统计信息“阵列”正确对齐。

祝你今天过得愉快!:-)

马丁

0 投票
2 回答
163 浏览

c# - C# uint64 -- 存储数据?

有没有更好的方法将数字数据存储在 uint64 中,而不是使用 x 位来存储一件,y 位来存储其他东西?(共 20 位数可使用)

我正在尝试存储有关对象的信息,而无需创建结构或类的开销。我需要以最小的开销尽可能快地获取/设置。

0 投票
2 回答
276 浏览

c - 二进制大数

我必须在参数中取一个 80 位的整数,将其转换为二进制,然后对其进行一些位移操作。我使用这个片段(似乎工作正常)来存储参数:

然后,我想用这个函数把它转换成二进制:

但是之后:

我将需要使用位移运算符,所以我需要一个可以与<<.