首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中任意大整数的算法

PHP中任意大整数的算法
EN

Stack Overflow用户
提问于 2018-09-30 03:47:05
回答 2查看 0关注 0票数 0

好的,因此PHP不是处理任意大整数的最佳语言,因为它本身只支持32位有符号整数。我正在尝试做的是创建一个可以表示任意大二进制数的类,并且能够对其中两个执行简单的算术运算(加/减/乘/除)。

我的目标是处理128位整数。

我正在看几种方法,以及我看到的问题。任何关于您将选择什么以及如何进行评论的输入或评论将不胜感激。

方法#1:创建一个128位整数类,在内部将整数存储为四个32位整数。这种方法的唯一问题是,我不确定在操作两个操作数的各个块时如何处理溢出/下溢问题。

方法#2:使用bcmath扩展,因为它看起来像它旨在解决的问题。我唯一担心采用这种方法是bcmath扩展的比例设置,因为我的128位整数中不会有任何舍入错误; 他们必须准确。我还担心能够最终将bcmath函数的结果转换为二进制字符串(我稍后需要将其转换为某些mcrypt加密函数)。

方法#3:将数字存储为二进制字符串(可能是LSB优先)。从理论上讲,我应该能够以这种方式存储任意大小的整数。我所要做的就是编写四个基本算术函数,对两个二进制字符串执行add / sub / mult / div并生成二进制字符串结果。这正是我需要交给mcrypt的格式,所以这是一个额外的加号。这是我认为目前最有希望的方法,但我得到的一个问题是PHP没有提供任何方法来操纵各个位(我知道)。我相信我必须把它分解成字节大小的块(没有双关语意),此时我对方法#1处理溢出/下溢的问题适用。

EN

Stack Overflow用户

发布于 2018-09-30 13:02:43

据我所知,bcmath扩展是你想要的扩展。PHP手册中的数据有点稀疏,但您可以通过使用bcscale()函数或大多数其他bcmath函数中的可选第三个参数来将精度设置为您所需的精度。不太确定二进制字符串的东西,但是一些谷歌搜索告诉我你应该能够通过使用pack()函数来做到这一点。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档