设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1717|回复: 4
打印 上一主题 下一主题

[胡扯] 超快的Java乘方算法在Ruby里面没用??

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

1
发表于 2018-8-23 13:28:43 | 显示全部楼层
本帖最后由 guoxiaomi 于 2018-8-23 13:53 编辑

虽然不知道为什么,但是你这个程序算出来的
  1. fast_pow(1.5, 3.0) = 3.395968437194824
  2. 1.5 ** 3.0 = 3.375
复制代码


测试了一下,其中fast_pow2是把第7和9行改成了 y = x % 1和 y = b % 1
RUBY 代码复制
  1. Benchmark.bm(10) do |t|
  2.   t.report('**_pow'){
  3.     1_000_000.times{1.5 ** 3.0}
  4.   }
  5.   t.report('fast_pow'){
  6.     1_000_000.times{fast_pow(1.5, 3.0)}
  7.   }
  8.   t.report('fast_pow2'){
  9.     1_000_000.times{fast_pow2(1.5, 3.0)}
  10.   }
  11.   a = 1.5
  12.   t.report('init_bits'){
  13.     1_000_000.times{x = a.int_bits}
  14.   }
  15.   b = 3.0
  16.   y = 0.06197100837140948
  17.   t.report('get_from'){
  18.     1_000_000.times{Float.get_from_int_bits(((b + 0x7f - y) * SHIFT23).to_i)}
  19.   }
  20. end
结果如下:
代码复制
  1. user     system      total        real
  2. **_pow       0.093000   0.000000   0.093000 (  0.092967)
  3. fast_pow     2.485000   0.000000   2.485000 (  2.485887)
  4. fast_pow2    2.406000   0.000000   2.406000 (  2.417023)
  5. init_bits    0.625000   0.000000   0.625000 (  0.621773)
  6. get_from     1.453000   0.000000   1.453000 (  1.463776)


点评

似乎Ruby的pack和unpack太慢了  发表于 2018-8-24 14:00
对,但是这里的分析表明float和int的转换才是大头,计算本身并没有这么明显  发表于 2018-8-24 13:03
fast_pow(1.5, 3.0) == 3.396 是精度低造成的,我自己测试的时候也发现了  发表于 2018-8-23 14:28
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-9 16:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表