【问题标题】:How do I make the function work for very big numbers?如何使该功能适用​​于非常大的数字?
【发布时间】:2020-10-29 12:46:00
【问题描述】:

我应该编写一个函数,使用 long long 计算 C 中三个数字的平均值。 (是的,不是程序,是函数)对于a = LLONG_MAX 和b = LLONG_MAX 和c = LLONG_MAX,平均值也是LLONG_MAX。

# include <stdio.h>
long long avg3(long long a, long long b, long long c)
{
   long long average;
   if (a == 9223372036854775807 && b == 9223372036854775807 && c == 9223372036854775807)
   {
       average = 9223372036854775807;
       return average;
   }
   else
   {
       average = (a + b + c) / 3;
       return average;
   }
}

但是对于某些数字,该函数不起作用,它会溢出或以某种方式失败。 例如:

avg3 ( -6019974895299362304, -5925017377408534528, -878297245955435520 ) => 
     r=-4274429839554444117, s=1874484851682073088

或

avg3 ( 9223372036854775800, 9223372036854775800, 9223372036854775800 ) => 
     r=9223372036854775800, s=3074457345618258594

我该如何解决这个问题?

【问题讨论】:

标签: c function


【解决方案1】:

您可以使用__int128,让您拥有更多内存。

GCC documentation

【讨论】:

  • 所以基本上我用__int128 average替换long long average?
  • 是的,所以现在您可以使用数字 3.4028237e+38。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多