关于整除和取余在各种语言中的不同表现汇总

关于整除和取余在各种语言中的不同表现汇总

在数学中

被除数 = 除数 × 商 + 余数

数学中的定义,整除取整没有歧义,为a/b的向下取整运算,对应的余数将与除数相同,注意,严格按照此公式,余数可以为负数,这与我们小学学到的并不相同。

然而在各种计算机语言中,并没有语言严格遵守以上约定

在C 中遵循一个规律,余数符号与被除数一致,除法取整时,是朝着靠近0的方向取整。大多数的语言也与c 保持一致 ,诸如C++,java,swift,Objective-C等,

可以看到结果与上面结论一样,然后使用公式

被除数 = 除数 × 商 + 余数;发现等式成立。

在Dart 语言中,

遵循除法取整时,是朝着靠近0的方向取整,且余数总为非负整数。

故而以上的结果为

这样结果就不在满足以上等式。可能Dart的设计者坚信,余数为非负整数,看来余数为非负整数这一错误观念深入人心

在JS 中,取消了整除的概念,自行使用取整函数,取余函数与大多数语言一样与C保持一致,余数符号与被除数一致。

可见大部分语言在设计的时候,并没有参照严格的数学公式而是参照了C语言的设计,而C在设计时,考虑到余数符号与除数一致的想法总是违背了普通人的直觉,随着数学水平的提高,余数符号与除数一致,向下取整更容易被人接受。

目前发现遵从严格数学定义的是Python语言

Python语言中

余数符号与除数一致,除法取整时,向下取整来实现的

故而以上的正确结果应该为

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值