从品牌网站建设到网络营销策划,从策略到执行的一站式服务
Ruby 的负数除法为什么要向负无穷取整呢?
创新互联网站建设公司是一家服务多年做网站建设策划设计制作的公司,为广大用户提供了成都做网站、网站设计、外贸营销网站建设,成都网站设计,广告投放平台,成都做网站选创新互联,贴合企业需求,高性价比,满足客户不同层次的需求一站式服务欢迎致电。
今天学习Ruby的过程中遇到一个问题:
puts (5 % 3) # prints 2
puts (-5 % 3) # prints 1
puts (5 % -3) # prints -1
puts (-5 % -3)# prints -2
看了半天表示没有找到什么好的规律...
于是搜之,翻到了整数除法定义:
class Float
end
class Fixnum
end
感觉ruby定义的真是干净利落!貌似只要是懂英语的都能看懂呵呵~
先转成浮点,然后除之。
那么-5%3怎么就等于-1了呢?
有公式a%b = a - (a/b * b).于是乎,应该先求出来-5/3。根据上面公式知道-5/3会利用小数除法,即-5/3 = -1.6666666...那该怎么去小数部分呢?起初我以为是按照取绝对值,然后四舍五入,那么-1.6666666...应该是-2,没错,对于这个除法结果是正确的。
但是,对于-4%3呢?
按照取绝对值,然后四舍五入来算,那么-4/3 = -1.33333...那么,应该得到-1,于是乎,模应该是-1;不过,大家都懂得,既然都写到这了,怎么着这个值也不能再等于-1了吧。呵呵,你猜的没错,(-4/3 == -2)这个表达式是true。
What's the fuck???!!!
我-4怎么能和-5一样???我-4的那个1呢!!!我-4竟然和“欧巴”-5一样大这让我以后再数字界怎么混@_@
好了,言归正传,为什么会这样,又搜了搜,发现下面的一些注解:
问:"Ruby rounds(翻译成圆整?取整?四舍五入?) toward negative infinity."IA32 的div命令不是向零取整吗?rub为什么要多此一举向负无穷rounds呢?这样有什么特别的意义吗?
答:没有什么特别的意义,在《Ruby Programming Language》3.1.3中说明了,与C相关的语言,如C,C++,Java是向零取整,Python,Tcl,Ruby是向负无穷取整。在x86指令中,SAR是向右取整的,IDIV是向零取整的。
好吧,原来就是这么平淡无奇的原因,以为会有什么好的发现,有些失望...
就这么着吧,伤心了呵呵~
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图