网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Ruby取模探险记

Ruby 的负数除法为什么要向负无穷取整呢?

创新互联网站建设公司是一家服务多年做网站建设策划设计制作的公司,为广大用户提供了成都做网站、网站设计、外贸营销网站建设,成都网站设计,广告投放平台,成都做网站选创新互联,贴合企业需求,高性价比,满足客户不同层次的需求一站式服务欢迎致电。

今天学习Ruby的过程中遇到一个问题:

puts (5 % 3)  # prints 2
puts (-5 % 3) # prints 1
puts (5 % -3) # prints -1
puts (-5 % -3)# prints -2

看了半天表示没有找到什么好的规律...

于是搜之,翻到了整数除法定义:

class Float 
    def to_s  
        format("%.4f", self)  
    end 
end 
 
class Fixnum 
    def / (num)  
        self.to_f/num.to_f  
    end 
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取模探险记这让我以后再数字界怎么混@_@

好了,言归正传,为什么会这样,又搜了搜,发现下面的一些注解:

问:"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是向零取整的。

好吧,原来就是这么平淡无奇的原因,以为会有什么好的发现,有些失望...

就这么着吧,伤心了呵呵~


文章题目:Ruby取模探险记
文章路径:http://bjjierui.cn/article/ijijgd.html

其他资讯