c++ - C++中的大量十进制值存储

标签 c++ algorithm

我想编写一个程序,返回给定条件下我们可以存活多少个月 我们的每月支出、可支配收入金额和利率(均为整数)。 例如,如果我们开始时可支配收入 = 1000,利率 = 5%,每月支出 = 100,则

after first month: 1000*1.05 - 100 = 950, we have 950 dollars left
after second month: = 950*1.05 - 100 = 897.5 

等等,最终,我们可以活过14个月。

我用C++写了下面的代码:

int main(){

int i=0;
int initialValue;
int interest;
int monthly; 
double value=1.0*initialValue;
double r=1+1.0*interest/100;
while(value > 0){
    if(value < monthly){
        break;
    }
    else
    {
    value=value*r-monthly;  
    i++;
    }
};
cout<<i;
return 0;
}

但是对于足够大的 initialValue 值和足够小的 monthly 值,我编写的程序运行速度非常慢,以至于无法使用。是不是代码有问题导致运行不好(或者很慢)?

如有任何帮助,我们将不胜感激。

最佳答案

double 无法精确存储数字。这样做的一个结果是,当您从一个非常大的数字中减去一个非常小的数字时,结果与原来的大值并没有改变。

此问题的一个解决方案是使用 int 进行计算。将值视为便士数,而不是美元数。

关于c++ - C++中的大量十进制值存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25354736/

相关文章:

algorithm - 使用平板实现平面点定位

c++ - 从传递给模板函数的内部类实例中提取外部类类型

c++ - 在其派生类中更改基类方法的返回类型

algorithm - pi 中 4 位序列的上限

arrays - 在不更改输入的情况下查找数组中的重复项?

algorithm - 财政周的时间戳

c++ - 如何将数字转换为十进制字符串?

c++ - 更新屏幕以渲染相机位置

c++ - 在执行二进制序列化时删除 stringstream 结果的 const-ness 是否安全?

C++:为什么这个 sync() 在这个组合模式中不起作用?