(我只是GMP-library的间接用户,主要是通过

swi-prolog和

yap.但我对解决这个问题非常感兴趣.)

当使用可笑的大值执行取幂时,主机系统或GMP不再能够适当地处理溢出.我已经与上述系统的开发人员进行了交谈,但他们没有看到一个简单的解决方案.

这个问题是否为其他GMP系统/用户所知?你如何处理这种溢出?

作为一个完整性检查首先测试7 ^ 7 ^ 7的值应该是:375982 … 32343

在32位系统上,例如查询? – X是13 ^ 1150000000.产生这样的溢出.以下是YAP给出的内容:

GNU gdb (GDB) 7.0-ubuntu

Copyright (C) 2009 Free Software Foundation,Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY,to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "i486-linux-gnu".

For bug reporting instructions,please see:

...

Reading symbols from /opt/gupu/src/yap-6.3/narch-gupu2/yap...done.

(gdb) run -f

Starting program: /opt/gupu/src/yap-6.3/narch-gupu2/yap -f

YAP 6.3.2 (i686-linux): Sun Nov 11 04:19:37 CET 2012

?- X is 13^1150000000.

Program received signal SIGSEGV,Segmentation fault.

0x001638d8 in ?? () from /usr/lib/libgmp.so.3

(gdb) bt

#0 0x001638d8 in ?? () from /usr/lib/libgmp.so.3

#1 0x00164470 in __gmpn_mul_fft () from /usr/lib/libgmp.so.3

#2 0x001646c2 in __gmpn_mul_fft_full () from /usr/lib/libgmp.so.3

#3 0x00165f28 in __gmpn_sqr_n () from /usr/lib/libgmp.so.3

#4 0x0014b58b in __gmpz_n_pow_ui () from /usr/lib/libgmp.so.3

#5 0x0014c4a1 in __gmpz_pow_ui () from /usr/lib/libgmp.so.3

#6 0x080c4a1d in Yap_gmp_exp_int_int (i1=13,i2=1150000000) at ../C/gmp_support.c:939

#7 0x0815f9df in p_exp (t1=,t2=3082051592) at ../C/arith2.c:609

#8 0x080b1f19 in Eval (t=0) at ../C/eval.c:147

#9 0x080b2251 in p_is () at ../C/eval.c:186

#10 0x0806b56a in Yap_absmi (inp=0) at ../C/absmi.c:6912

#11 0x080b3655 in exec_absmi (top=) at ../C/exec.c:1002

#12 0x080b3b1f in do_goal (t=,CodeAdr=,arity=,pt=0x0,top=1) at ../C/exec.c:1068

#13 0x080b3d1d in Yap_RunTopGoal (t=135918154) at ../C/exec.c:1291

#14 0x08061a6f in YAP_RunGoalOnce (t=135918154) at ../C/c_interface.c:2511

#15 0x0805c2f5 in do_top_goal (argc=2,argv=0xbffff4c4) at ../console/yap.c:84

#16 exec_top_level (argc=2,argv=0xbffff4c4) at ../console/yap.c:131

#17 main (argc=2,argv=0xbffff4c4) at ../console/yap.c:172

(gdb)

编辑:对于64位系统也是如此;像这样:

Welcome to SWI-Prolog (Multi-threaded,64 bits,Version 6.3.5)

Copyright (c) 1990-2012 University of Amsterdam,VU Amsterdam

SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to redistribute it under certain conditions.

Please visit http://www.swi-prolog.org for details.

For help,use ?- help(Topic). or ?- apropos(Word).

?- X is 3445^2^62.

gmp: overflow in mpz type

Abort

然而,

?- X is 2^2^63.

ERROR: Out of global stack

?- X is 2^2^62.

gmp: overflow in mpz type

Abort

从下面:

?- X is 2^2^36.

ERROR: Out of global stack

?- X is 2^2^37.

gmp: overflow in mpz type

Abort

因此,如果数字足够大,则SWI会检测到错误 – 因此可以由SWI处理(错误:消息来自SWI).

c语言pow为什么溢出,c – GMP pow中的溢出处理相关推荐

  1. python pow函数用法_python的pow函数怎么用

    pow() 方法返回 xy(x的y次方) 的值. 以下是 math 模块 pow() 方法的语法:import math math.pow( x, y ) 内置的 pow() 方法pow(x, y[, ...

  2. C语言从入门到精通 【精读C Prime Plus】【C语言笔记1-4章节】【更新中~】

    知识来源[C Prime Plus 第六版][互联网] 目录 前言 一.初识C语言 C语言的特点及关键词 编译器 C语言编程的基本策略: 二.简单C程序示例概述 三.数据和C (一些基础知识) 变量和 ...

  3. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

  4. R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts))

    R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts)) ...

  5. R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)

    R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line) 目录 R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)

  6. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  7. R语言ggplot2可视化、在可视化区域中自定义添加多个大小不同矩形阴影区域、自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles)

    R语言ggplot2可视化.在可视化区域中自定义添加多个大小不同矩形阴影区域.自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles) 目录

  8. R语言stringr包str_detect函数检测字符串中模式存在与否实战

    R语言stringr包str_detect函数检测字符串中模式存在与否实战 目录 R语言stringr包str_detect函数检测字符串中模式存在与否实战 #导入stringr包

  9. R语言自定义函数计算dataframe每列中的缺失值NA的个数、缺失值问题及其填充示例

    R语言自定义函数计算dataframe每列中的缺失值NA的个数.缺失值问题及其填充示例 目录

  10. R语言ggplot2可视化在可视化的接种中插入图片、添加图片实战

    R语言ggplot2可视化在可视化的接种中插入图片.添加图片实战 目录 R语言ggplot2可视化在可视化的接种中插入图片.添加图片实战

最新文章

  1. linux中python如何调用matlab的数据_?如何在Python中加入多个数据帧?
  2. python使用什么注释语句和运算-Python代码注释的用法和意义
  3. 12日疯人认证百度云_百度云智峰会12月17日召开,央视财经对话现场要做一场高端访谈...
  4. Elastic-Job中的ScriptJob
  5. 快速查询ABAP transport request lock status
  6. winrar皮肤的更换
  7. javascript --- 实现Ajax的代码
  8. ES6 里面的 class
  9. Minigui3.0.12完美安装
  10. Linux命令行解析参数之getopt_long
  11. java代码调用python_java 直接调用python脚本,并传递参数代码实例
  12. 容器技术Docker K8s 25 容器服务ACK基础与进阶-监控管理
  13. NYOJ517 最小公倍数
  14. 达梦数据库DM7手把手安装教程
  15. java中将字符串转换为URL能解析的编码
  16. linux卸载intel驱动程序,删除Ubuntu Intel官方驱动包并添加pdadoka PPA
  17. 计算机word大作业,计算机操作基础--Word大作业要求.doc
  18. access建立两个字段唯一索引_Mysql不止CRUD,聊聊索引
  19. 一键获取网页中的全部图片并批量下载(国内淘宝天猫京东网站+国外商品页面)——亲测有效
  20. Redit集群搭建-Sentinel模式搭建

热门文章

  1. Ubuntu下面scroll lock无法使用的解决方法
  2. 石子合并,四边形不等式优化(Buy Candy,玲珑杯 Round#6 A lonlife 1066)
  3. 奇点云完成8000万元B2轮融资,加速云原生技术布局
  4. Windows下修改本机域名localhost
  5. 第三次作业--结对编程
  6. 苹果MFi认证协处理器(MFI337S3959)公钥证书分析
  7. 数据结构 实验三 算术表达式求值 栈的基本操作
  8. Python从入门到自闭(网络篇)
  9. 儿童汽车拼图游戏 - 儿童游戏拼图2岁-5岁
  10. photoshop修色圣典 第5版pdf