免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2407 | 回复: 8
打印 上一主题 下一主题

关于Math::Bigint问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-08 15:38 |只看该作者 |倒序浏览
写Perl需要64位,所以用了math::bigint,但是程序运行特别慢,什么原因

论坛徽章:
0
2 [报告]
发表于 2012-08-08 16:50 |只看该作者
回复 1# perldandan

可以用perl的profiler查看调用模块的效率

  1. $ cat test.pl
  2. #!/usr/bin/perl -w

  3. use strict;

  4. my %data =
  5. (
  6.     a => 1,
  7.     b => [ { b => 1 }, { c => 2 }, 3 ],
  8.     c => { x => [ 1, 3, 2 ], y => 4 }
  9. );

  10. my $copy = deep_copy( \%data );

  11. sub deep_copy
  12. {
  13.     use YAML::XS;
  14.     return YAML::XS::Load( YAML::XS::Dump( shift ) );
  15. }

  16. $
  17. $ perl -d:DProf test.pl
  18. $
  19. $ dprofpp tmon.out
  20. dprofpp will be removed from the Perl core distribution in the next major release. Please install Devel::DProf from CPAN.
  21. Total Elapsed Time = 0.039857 Seconds
  22.   User+System Time = 0.039857 Seconds
  23. Exclusive Times
  24. %Time ExclSec CumulS #Calls sec/call Csec/c  Name
  25. 75.2   0.030  0.030      4   0.0075 0.0075  YAML::XS::BEGIN
  26. 25.0   0.010  0.040      4   0.0025 0.0100  main::BEGIN
  27. 0.00       - -0.000      1        -      -  re::bootstrap
  28. 0.00       - -0.000      1        -      -  re::bits
  29. 0.00       - -0.000      1        -      -  B::threadsv_names
  30. 0.00       - -0.000      1        -      -  utf8::is_utf8
  31. 0.00       - -0.000      1        -      -  mro::method_changed_in
  32. 0.00       - -0.000      1        -      -  YAML::XS::LibYAML::Dump
  33. 0.00       - -0.000      1        -      -  YAML::XS::LibYAML::bootstrap
  34. 0.00       - -0.000      1        -      -  B::bootstrap
  35. 0.00       - -0.000      1        -      -  Internals::SvREADONLY
  36. 0.00       - -0.000      1        -      -  YAML::XS::LibYAML::Load
  37. 0.00       - -0.000      1        -      -  re::import
  38. 0.00       - -0.000      2        -      -  UNIVERSAL::isa
  39. 0.00       - -0.000      2        -      -  base::has_version
  40. $
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-08-08 17:16 |只看该作者
好复杂啊!用perl的profiler查看调用模块的效率怎么查看,用下面的代码么?我是初学者不太懂啊!谢谢啊!

论坛徽章:
0
4 [报告]
发表于 2012-08-08 17:22 |只看该作者
回复 3# perldandan

在*nix/bsd上,假设你的可执行文件名字是 "myscript.pl", 执行下面的2个命令。

    perl -dProf myscript.pl

    dprofpp tmon.out

论坛徽章:
0
5 [报告]
发表于 2012-08-08 17:28 |只看该作者
我是在linux系统下,好像不对,Prof有问题啊!

论坛徽章:
0
6 [报告]
发表于 2012-08-08 21:39 |只看该作者
使用 Math::Bigint 会提高程序的精度 但是会让程序运行耗费更多的硬件资源和时间 可以限制Math::Bigint 的作用范围!
  1. {
  2.    use bignum;
  3. ### do it now!
  4. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-08-09 09:58 |只看该作者
那如何优化呢?怎样限制范围呢?谢谢!现在是急需!谢谢!

   

论坛徽章:
0
8 [报告]
发表于 2012-08-09 10:12 |只看该作者
限制范围的意思就是在你需要高精度的地方 写上上面的代码块!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2012-08-09 21:36 |只看该作者
这一楼都是没用过Math::BigInt模块的吧

Math::BigInt的效率是很高的,你觉得慢是因为你没装GMP的库,所以没有成功安装Math::BigInt::GMP。这样Math::BigInt会用纯Perl模块Math::BigInt::Calc来处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP