C++:使用大数 (>1 mrd.) 和分度进行计算
C++: Calculate using large numbers (>1 mrd.) and procentage
我想使用当前值的百分比来计算元素的价格。例如:一个苹果现在的价格为4 $,对于您购买的每个苹果,价格都会上涨7%。因此,第一个苹果将花费4美元,接下来的4.28 $(价格 4 $的7%),下一个4.58 $(价格 4.28 $的7%)等等。我的脚本以某种方式工作,但是随着数字越来越大,我很难为此找到正确的数据类型。由于我必须到最后2位数字,所以我正在做这样的事情:
int64_t c = 0;
double ergebnis = 0;
double komma1 = 0;
komma1 = komma1 + ((komma1 / 100) * 7);
c = komma1 * 100;
ergebnis = c / 100.0;
问题是,如果我购买了50000个苹果,这个数字将会太大,以至于结果将成为负数。我正在使用" Visual Studio 2017社区版"。
#include "stdafx.h"
#include "stdint.h"
#include "iostream"
#include "Windows.h"
using namespace std;
int main()
{
cout.precision(40);
int price = 4;
long double cost = 0;
long double b = 4;
int d = 0;
while (d != 50000)
{
cost = price + (price / 100 * 7);
price = cost * 100.00;
cost = price / 100.00;
d = d++;
}
cout << "Number is: " << cost << endl;
Sleep(5000);
return 0;
}
这几乎描述了我的问题。
我已经使用了Google并找到了将" INT64_T"用作整数的想法,但是我认为真正的问题是这里的双重问题,对吗?
so,tl; dr:
- 在C ? 中使用相当大数字的任何方法
有什么方法可以使用其他解决方案解决我的问题?喜欢将数字分配或其他东西?喜欢:
if(number == 1.000.000){百万=百万 ;数字= 4;}
在您的编辑代码中:
首先,此:
d = d++;
可能是未定义的(您应该收到汇编警告),例如:
warning: operation on 'd' may be undefined [-Wsequence-point]
d = d++;
~~^~~~~
用:
替换此代码行d++;
等效于:
d = d + 1;
price
是int
。然后,您执行整数price / 100
,这将给出int
的结果!因此,整数部门的4/100给出0。将一个操作数施加到浮点值,以获取将产生浮点数数字的划分。例如。(long double)price / 100
。
但是,您所说的算法与预期结果不符。您说您想从4美元,4.28美元收取费用,然后收取4.58美元。实现此目的的公式不是您描述的,而是:
cost = cost + cost * 7%
此外,这两行代码没有意义:
price = cost * 100.00;
cost = price / 100.00;
只是丢弃它们。
此外,由于您知道要执行迭代的次数多少次,请使用循环,而不是wires循环。
将所有东西放在一起,您得到:
#include "iostream"
using namespace std;
int main()
{
cout.precision(40);
long double cost = 4;
for(int i = 0; i < 50000; ++i)
{
cost = cost + ((long double)cost / 100 * 7);
}
cout << "Cost is: " << cost << endl;
return 0;
}
您试图计算复合兴趣的尝试是非常错误的。该程序没有做任何与您的描述所说的事情相似的事情。
这是您的循环的外观:
long double price = 4.0;
for (int i = 0; i < 50000; ++i)
{
price = price * 1.07; // == (100.0 + 7.0)/100.0
}
常规double
没有代表您价格的范围,但是long double
还可以。如果您想走更大,则需要第三方大数库。请注意,离答案的最接近整数具有约1500个十进制位数,因此具有这样的数字的计算可能会很慢。
可以在不循环的情况下获得相同的结果:
std::cout "The number is " << 4 * std::pow (1.07L, 50000) << "n";
尝试long double
而不是double
。在C和C 中长双重和双重之间的差异。
提防浮点精度,并在使用对精度敏感的变量进行计算时进行转换。
在C ?
中使用相当大的方法
使用库,例如GNU多重精度(GMP):
"用于任意精确算术的免费库,在签名的整数上运行,有理数和浮点数。精确度没有实际限制,除了机器GMP中可用内存所隐含的数字外,GMP启用了。GMP具有丰富的功能集,并且功能具有常规接口。"
但是,这些库用于高级用法。确保您确实需要使用大量数(处理时大量耗时)。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- C++:使用大数 (>1 mrd.) 和分度进行计算