首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

做乘法的时候,数据溢出的有关问题

2012-02-09 
做乘法的时候,数据溢出的问题以下是我的一段测试代码,大家看看如何解决?谢谢!#include iostreamunsigned

做乘法的时候,数据溢出的问题
以下是我的一段测试代码,大家看看如何解决?
谢谢!
#include <iostream>
unsigned   long   int   speed;
void   SetSpeed(unsigned   long   int   s)
{
    speed   =   s;
}
unsigned   long   int   GetSpeed(){
    return   speed;
}
int   main()
{
    SetSpeed(2500*1000000);
    std::cout < <GetSpeed() < <std::endl;
    SetSpeed(10000*1000000);
    std::cout < <GetSpeed() < <std::endl;
}

编译提示是:
overflow.cpp:   In   function   `int   main() ':
overflow.cpp:12:   warning:   integer   overflow   in   expression
overflow.cpp:14:   warning:   integer   overflow   in   expression

用的是cygwin。如果是VS2005,那么是:
warning   C4307:   '* '   :   integral   constant   overflow


[解决办法]
用float或者double,不过都有精度限制
-------------------------
float表示的数一般在10的正负38次方左右,6到7位有效数字
double表示的数一般在10的正负308次方左右,15到16位有效数字
当然不同平台可能稍微不同
-------------------------
对于科学计算问题,一般精度要求不十分高(超过20位有效数字)的话,用double是不错的选择,如果要求绝对精度的问题,那么只能是用数组方式处理大数运算了


[解决办法]
数据溢出用科学记数法.

[解决办法]
用__int64
[解决办法]
long long吧.

再不行, 只能自己定义类来模拟了.

热点排行