Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个数学转换看起来正确吗?(ruby->;mysql)_Mysql_Ruby On Rails_Ruby_Database_Math - Fatal编程技术网

这个数学转换看起来正确吗?(ruby->;mysql)

这个数学转换看起来正确吗?(ruby->;mysql),mysql,ruby-on-rails,ruby,database,math,Mysql,Ruby On Rails,Ruby,Database,Math,我用一个数学算法来计算“What's hot”排序类型。它基本上生成一个长的多位数浮点数,该浮点数考虑了时间和给定时间跨度内的投票数 我让mysql来处理这个问题,以减少服务器上的负载,我想确保我没有遗漏任何东西。这部分在我的应用程序中非常重要 以下是对其工作原理的描述: 数字:1134028003只是一个任意的数字,它定义了应用程序发布日期的秒数,这样一来,数字从零开始,随着时间的推移,它们慢慢地增长 以下是我现在为mysql所做的: def self.with_hot_ranking

我用一个数学算法来计算“What's hot”排序类型。它基本上生成一个长的多位数浮点数,该浮点数考虑了时间和给定时间跨度内的投票数

我让mysql来处理这个问题,以减少服务器上的负载,我想确保我没有遗漏任何东西。这部分在我的应用程序中非常重要

以下是对其工作原理的描述:

数字:1134028003只是一个任意的数字,它定义了应用程序发布日期的秒数,这样一来,数字从零开始,随着时间的推移,它们慢慢地增长

以下是我现在为mysql所做的:

  def self.with_hot_ranking
    select("resources.*, (
        round( 
               log10(greatest(abs(resources.score),1)) + 
               if(resources.score > 0, 1, if(resources.score < 0, -1, 0)) * 
               (UNIX_TIMESTAMP(resources.created_at)-1134028003) / 
               45000.0
              , 7)
    ) hot_ranking")
  end
def self.with_hot_排名
选择(“资源”(
圆形(
log10(最大(abs(resources.score),1))+
if(resources.score>0,1,if(resources.score<0,-1,0))*
(UNIX_时间戳(resources.created_at)-1134028003)/
45000
, 7)
)热门排行榜)
结束
这是我的实例方法,仅用于测试目的。我想确保这也是正确的。这似乎太快了,我不知道为什么

  def hot_ranking
    # to sort by hot_ranking use the class method with_hot_ranking instead i.e.
    # Resource.with_hot_ranking.order('hot_ranking DESC')
    s = self.score
    order = Math.log10([s.abs, 1].max)
    sign = s <=> 0
    seconds = epoch_seconds(self.created_at).to_i - 1134028003
    (order + sign * seconds / 45000).round_to(7).to_f
  end
def hot_排名
#要按热门排名进行排序,请使用带有热门排名的类方法,即。
#资源。具有热排名。顺序('hot\u ranking DESC')
s=自我评分
order=Math.log10([s.abs,1].max)
符号=s 0
秒=历元秒(自创建的秒数)至秒i-1134028003
(订单+签名*秒/45000)。四舍五入到(7)。到
结束

看起来像链接的公式,除非您使用的是双精度
IF
而不是
符号()

您应该为它编写测试。测试一般值和拐角情况。