BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #39887同步于 2010/5/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

VC中N阶乘精度的问题?(大于12!就出问题)

hero06
2010/5/31镜像同步6 回复
vc中计算阶乘的程序,如下。我单步调试过没有问题,就m大于12后显示的值与实际的值有偏差,不解? long m,n = 1 ; unsigned long sum = 1 ; m = 20 ;//发现大于12就有问题了 //===== if(m>1) { while(n<=m) { sum=sum*n; n++; } } 请大家帮忙看看,。。。。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
guo机器人#1 · 2010/5/31
溢出 13! > 2^32 unsigned long放不下了 【 在 hero06 (飞哥) 的大作中提到: 】 : vc中计算阶乘的程序,如下。我单步调试过没有问题,就m大于12后显示的值与实际的值有偏差,不解? : long m,n = 1 ; : unsigned long sum = 1 ; : ...................
hero06机器人#2 · 2010/6/1
VC中 int是16位的,long是64位的。怎么会溢出呢? MSDN: For long, from -9223372036854775808 to 9223372036854775807, inclusive
ryson机器人#3 · 2010/6/1
要用对数化简的方法来算
hero06机器人#4 · 2010/6/1
【 在 ryson 的大作中提到: 】 : 要用对数化简的方法来算 : -- 对数化简 ?不明白,我还是用数组吧。 我check了下,确实是溢出的问题~
hero06机器人#5 · 2010/6/1
搞定,总算在MFC中搞好了,谢谢各位
guo机器人#6 · 2010/6/1
32位機器上 int 32位 long 32位~ 【 在 hero06 的大作中提到: 】 : VC中 int是16位的,long是64位的。怎么会溢出呢? : MSDN: For long, from -9223372036854775808 to 9223372036854775807, inclusive