首页 / 知识
关于python:具有负值的模运算-奇怪的事情吗?
2023-04-14 04:55:00

Modulus operation with negatives values - weird thing?
您能告诉我 我读过某些语言的结果可能与机器有关,但是我不
顺便说一句:大多数编程语言会不同意Python并给出结果 对负数进行模运算的结果似乎与编程语言有关,下面是列表http://en.wikipedia.org/wiki/Modulo_operation
您的Python解释器是正确的。
例如。: 或您的情况:?2 mod 5 =(?2 + 5)mod 5 = 3 就像文档在二进制算术运算中所说的那样,Python确保:
确实
可视化此方法均匀性的另一种方法是为一小序列数字计算
好吧,0%5应该是0,对吧? -1%5应该为4,因为这是下一个允许的反向数字(即,不能为5,因为这超出了范围)。 遵循该逻辑,-2必须为3。 考虑它如何工作的最简单方法是,您不断加减5,直到数字介于0(含)和5(不含)之间。 我不确定机器的依赖性-我从未见过这样的实现,但是我不能说它从未完成。 如其他答案所述,对于具有负值的模运算,有很多选择。通常,不同的语言(和不同的机器体系结构)将给出不同的结果。 根据Python参考手册,
是Python采取的选择。基本上定义了模,以便始终保持:
所以说(-2)%5 = -2-(-2/5)* 5 = 3很有意义 术语"模"和"余数"之间似乎存在一个常见的混淆。
在数学中,应始终定义与商一致的余数,以便如果
但是,取模应始终给出结果
某些语言(尤其是C和C ++)没有定义所需的舍入/余数行为,并且
Ada朝着零IIRC四舍五入,但同时具有 C策略旨在允许编译器为计算机选择最有效的实现,但是IMO至少在最近这些天是错误的优化。一个好的编译器可能会在不会出现负数的地方(并且几乎可以肯定,如果使用无符号类型)可以使用等效项进行优化。另一方面,在可能出现负数的地方,您几乎可以肯定会在乎细节-出于可移植性的原因,您必须使用精心设计的过度复杂算法和/或检查以确保无论舍入和余数如何都得到想要的结果行为。 换句话说,这种"优化"的收益大部分(如果不是总是)是一种幻想,而在某些情况下却存在非常实际的成本-因此这是错误的优化。 注意不要在所有OS和体系结构上都依赖C / C ++中的mod行为。如果我没记错的话,我尝试依赖C / C ++代码,例如
将x2的范围保持在0到n-1之间,但是当我在一个OS上进行编译时,负数会逐渐增加,但是在另一个OS上一切正常。因为它只发生一半的时间,所以调试很麻烦! 一种解释可能是负数使用2的补码存储。当python解释器尝试执行模运算时,它将转换为无符号值。因此,实际上不是计算(-2)%5,而是计算0xFFFF_FFFF_FFFF_FFFD%5,即3。 结果取决于语言。 Python返回除数的符号,例如c#返回除数的符号(即-2%5在c#中返回-2)。 确实为3。在模算术中,模数只是除法的余数,而-2除以5的余数是3。 好吧,-2除以5等于0,其余为3。我不认为这应该与平台密切相关,但是我已经看到了一些奇怪的东西。 |
最新内容
相关内容
linux命令是什么语言?
linux命令是什么语言?,系统,环境,代码,传播,管理,语言,操作系统,源码,自由,部分,dos和linux的命令行里面用的是什么语言?1、DOS/Windows/Linuxlinux改语言命令行?
linux改语言命令行?,系统,环境,工具,密码,概念,地方,软件,通信,管理,国际,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGE=zh_linux命令行c语言?
linux命令行c语言?,代码,系统,工具,环境,工作,保险,发行,命令,文件,终端,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言源c语言在linux命令?
c语言在linux命令?,系统,工作,管理,命令,保险,基础,环境,信息,文件,语言,linux系统的命令是什么linux常用命令有pwd命令、cd命令、ls命令、catlinux各种命令的解释?
linux各种命令的解释?,地址,工作,系统,信息,命令,目录,时间,管理,控制台,常用命令,linux的常用命令有哪些呢???希望带上解释date:打印或者设置linux路径命令解释?
linux路径命令解释?,系统,信息,设备,数据,工具,命令,文件,标准,发行,时间,linux查看路径命令1、linux命令如果记不得,可以使用man命令来查看某linux编写c语言命令?
linux编写c语言命令?,系统,基础,环境,代码,盘面,保险,百度,情况,数据,工具,在Linux系统中,如何运行一个C语言程序?编译。由.c文件生成.o文件,写linux进程命令解释?
linux进程命令解释?,系统,状态,基础,进程,信息,时间,命令,实时,软件,名称,Linux中用于进程显示的top命令使用实例集锦1、Top 命令输出: 首先,让linux关机命令解释?
linux关机命令解释?,系统,工作,命令,时间,银河,信息,用户,级别,终端,指令,linux关机命令1、shutdown命令 shutdown命令用于安全关闭Linux系统linux改变语言命令?
linux改变语言命令?,系统,管理,网上,官方网站,情况,服务,中文,语言,命令,终端,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGEc语言编译linux命令?
c语言编译linux命令?,代码,工具,环境,系统,基础,保险,百度,语言,源程序,文件,Linux中,运行一个C语言程序如何运行1、编译。由.c文件生成.o文件linux常用命令语言?
linux常用命令语言?,工作,地址,系统,信息,命令,目录,标准,管理,工具,服务,linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列出目录