首页 / 知识
PHP中具有任意大整数的算术运算
2023-04-13 19:13:00

Arithmetic with Arbitrarily Large Integers in PHP好的,考虑到PHP仅本地支持32位带符号整数,因此它并不是处理任意大整数的最佳语言。我要尝试做的是创建一个类,该类可以表示任意大的二进制数,并且能够对其中两个(加/减/乘/除)进行简单的算术运算。 我的目标是处理128位整数。 我正在寻找几种方法,以及我遇到的问题。任何关于您选择什么以及如何进行的输入或评论将不胜感激。 方法1:创建一个128位整数类,将其整数内部存储为四个32位整数。这种方法的唯一问题是,在处理两个操作数的各个块时,我不确定如何处理上溢/下溢问题。 方法2:使用bcmath扩展名,因为这看起来像是它要解决的问题。我唯一担心的是bcmath扩展的缩放比例设置,因为我的128位整数中没有任何舍入错误。他们必须精确。我还担心最终能否将bcmath函数的结果转换为二进制字符串(稍后需要将其转换为某些mcrypt加密函数)。 方法#3:将数字存储为二进制字符串(可能是LSB在前)。从理论上讲,我应该能够以这种方式存储任意大小的整数。我要做的就是编写四个基本的算术函数,对两个二进制字符串执行add / sub / mult / div,并产生一个二进制字符串结果。这正是我也需要移交给mcrypt的格式,所以这是一个额外的优点。这是我认为目前最有前途的方法,但是我遇到的一个棘手问题是,PHP没有提供任何方式来操纵单个位(我知道)。我相信我必须将其分解为字节大小的块(没有双关语),这时我对处理方法1中的上溢/下溢的问题适用。 PHP GMP扩展将对此更好。另外,您可以使用它来进行十进制到二进制的转换,如下所示:
已经有各种可用的类,因此您可能希望在编写自己的解决方案之前先仔细研究一下它们(如果确实需要编写自己的解决方案)。 据我所知,bcmath扩展名是您想要的扩展名。 PHP手册中的数据有些稀疏,但是您可以通过使用bcscale()函数或大多数其他bcmath函数中的可选第三个参数来将精度设置为恰好需要的精度。对二进制字符串的事情不太确定,但是有些谷歌搜索告诉我您应该可以通过使用pack()函数来处理。 我实施了以下PEMDAS投诉BC评估程序,这可能对您有用。
它会自动处理舍入误差,只需将精度设置为所需的任何数字即可。 |
最新内容
相关内容
linux支持管道的命令?
linux支持管道的命令?,通信,标准,系统,信息,地方,数据,管道,环境,设备,工具,Linux下Grep命令的详细使用方法?查找包含teacher文本的所有行并打linux改语言命令行?
linux改语言命令行?,系统,环境,工具,密码,概念,地方,软件,通信,管理,国际,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGE=zh_linux命令行c语言?
linux命令行c语言?,代码,系统,工具,环境,工作,保险,发行,命令,文件,终端,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言源linux编写c语言命令?
linux编写c语言命令?,系统,基础,环境,代码,盘面,保险,百度,情况,数据,工具,在Linux系统中,如何运行一个C语言程序?编译。由.c文件生成.o文件,写linux命令算术运算?
linux命令算术运算?,系统,工作,基础,信息,管理,代码,命令,技术,服务,网络,别不信!掌握好这20条Linux基础命令,让你的操作效率直接双倍杀死进程linux改变语言命令?
linux改变语言命令?,系统,管理,网上,官方网站,情况,服务,中文,语言,命令,终端,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGEc语言编译linux命令?
c语言编译linux命令?,代码,工具,环境,系统,基础,保险,百度,语言,源程序,文件,Linux中,运行一个C语言程序如何运行1、编译。由.c文件生成.o文件linux常用命令语言?
linux常用命令语言?,工作,地址,系统,信息,命令,目录,标准,管理,工具,服务,linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列出目录r语言命令行写linux?
r语言命令行写linux?,环境,数据,系统,工具,简介,官网,语言,报告,软件,发展,如何在linux环境下使用r语言是的,可以在Linux系统上安装RStudio。 Rlinux语言查找命令行?
linux语言查找命令行?,系统,工作,位置,标准,地址,信息,命令,管理,时间,文件,在linux命令行下如何查找显示/etc/passwd文件中包含root的行如何Python编程语言的优缺点
Python编程语言的优缺点,代码,网站,航空,管理系统,培训,系统,概念,网络,基础,机器人,Python是一种编程语言,它的名字来源于一个喜剧。是由Guid什么是Python语言?主要应用于哪些领
什么是Python语言?主要应用于哪些领域?,分析,人工智能,数据,公司,金融,人员,网络,量化交易,全球,时间,在当今社会,Python是一种非常流行的编程语