【问题标题】:How to process calculations with a high digit numbers?如何处理高位数的计算?
【发布时间】:2012-05-30 04:25:54
【问题描述】:

当我想处理大小数字时,我必须如何在 C 中求和/比较值?

#include <stdio.h>
#include <math.h>

int main(void) {
    if (1.0 + (1/pow (10,50)) == 1.0)
        printf("true");
    else
        printf("false");
    return 0;
}

如何让它返回false?

【问题讨论】:

  • 如果您的 10^50 是 '10 的 50 次方',那么这是不正确的,^ 是按位或。
  • @RaulP.R.O 这个问题指向大浮点数的概念,而不是大整数。任意精度的小数比任意长度的整数更适合这个问题。
  • @RaulP.R.O 谢谢,已更正
  • @Sholy 你还需要在 pow 之前有 1.0 我认为......但正如已经回答的那样,这并不重要,因为 c 浮点数/双精度数不够精确
  • @RoneRackal 不;将 int 和浮点数相除得到浮点结果。

标签: c floating-point numerical digits


【解决方案1】:

您不能使用标准 C 类型使其返回 false。您需要使用高精度浮点库。

【讨论】:

    【解决方案2】:

    在 C99 中,您可以获得的最高精度是 long double,在大多数现代 C 编译器/体系结构上,它是 64 位或 128 位 IEEE 浮点数。如果您想要更精确,请考虑使用一些库,例如 GCC 使用的库:

    GMP (http://gmplib.org/) - 整数和浮点数的任意精度算术; MPFR (http://www.mpfr.org/) - 多精度浮点库(声称可以正确舍入) MPC (http://www.multiprecision.org/index.php?prog=mpc) 任意精度复数库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      相关资源
      最近更新 更多