【问题标题】:How to find the log of a number?如何找到一个号码的日志?
【发布时间】:2012-04-02 08:04:54
【问题描述】:

我有一个 18 位数长的数字 (num1)。我将它存储在一个整数数组中。 我还有另一个数字 (num2),它也是 18 位数字。这也被存储在一个整数数组中。

我必须找到第一个数字的对数到第二个数字的基数(log num1 到基数 num2)。

如何在 C++ 中做到这一点?我不能使用 log 函数,因为数字存储在数组中。

【问题讨论】:

  • 您有正在使用的大型数字库吗?如果没有 - 买一个。
  • 如果你想手动做,看这个问题的答案stackoverflow.com/questions/739532/logarithm-of-a-bigdecimal
  • 18 位数字是什么?这些整数如何存储?什么字节序?打包二进制? ASCII十六进制? ASCII十进制?什么?您希望以什么形式输出?
  • 向我们展示您到目前为止所拥有的,尤其是数字的存储方式。结果,它必须是精确的还是可以是近似值(例如,53 位精度)?
  • 这听起来像是discrete log problem 上的一个非常困惑和不完整的问题。

标签: c++ math logarithm bignum


【解决方案1】:

谷歌的关键词是bigint。有多种 C++ 库支持bigints(即,只要您的内存允许,数字就可以了)。

我自己使用过的唯一 bigint 库是 GMP。但是,如果您只需要 bigints 上的单个函数(在您的情况下为日志),那么可能需要一些较小的库(更实用)。

刚刚检查了 GMP 页面,顺便说一句,它把它们全称为bignums。因此,在寻找解决方案时,这可能是另一个有用的术语。 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多