【问题标题】:C++ type with 200 digits after decimal point? [closed]小数点后200位的C++类型? [关闭]
【发布时间】:2017-12-27 16:43:18
【问题描述】:

我的学校有一个项目,其目标是创建执行操作的简单“虚拟机”。

为此,我们可以存储一些带有类型的数字,它们是: int8、int16、int32、float、double 和 big decimal。

我不知道的唯一类型是“大十进制”,它是这样描述的:“小数点后显示的最大位数是 float(7), double(15), bigdecimal(200) 。”

这么大的小数类型小数点后可以有200位。

C++ 中的任何类型都可以做到这一点?如果我必须处理字符串,那么操作会更复杂......

提前谢谢你!

PS:“• 除 STL 外,所有(外部)库都被明确禁止”

【问题讨论】:

  • 在 google 上搜索 gmp(GNU 多精度库)
  • 可能是重复的。检查this
  • 您必须处理字符串并实现教授要求您处理的任何算术运算。
  • "• 明确禁止所有(外部)库,STL 除外"
  • @JónásBalázs:不是骗子,因为禁止 OP 使用现有库。

标签: c++ calculator precision bigdecimal


【解决方案1】:

C++ 中没有“大十进制”类型;从您对问题的描述来看,您似乎愿意以非常高的精度实现自己的类型。

有不止一种方法可以做到这一点。以下是一些提示/潜在方向:

  • 如果 d1 ... dk 是数字,则 k 位数字 0.d1d2 ...dk 等于 10-k * d1 d2 .. . dk(即认为尾数和指数)。
  • 200 = 手数。不要尝试手动将您的号码设置为足够多的基本类型以获得 200 位数字。
  • 标准库有几个可以使用的类。不过,您可以hardly go wrong by basing your work on an std::vector。当然,您究竟想在该向量中放入什么是另一个问题。

【讨论】:

  • 实现正确的 BigDecimal 类型并非易事。有很多事情需要考虑。尤其是四舍五入不是那么容易,而且像多精度除法,乘法等可能是一项相当艰巨的任务。可能比 VM 的所有其他部分更重要。
  • @RudyVelthuis:OP 不应该实现通用的 BigDecimal,只是在学校项目级别的东西。
  • 即使是简单的实现(不实现 Karatsuba 或 Burnikel-Ziegler 或其他优化之类的东西)也不是那么容易。尤其是舍入和除法,而且解析和显示也不是很容易,即使使用 BCD 或字符串之类的东西也不行。我个人觉得这对于学校项目来说有点太多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多