开源项目

相关文章

更多

最近更新

更多

Guava LongMath类-long基础类型的Math实用方法

2019-04-23 23:22|来源: 网路

LongMath提供long基础类型的实用方法。

类声明

以下是com.google.common.math.LongMath类的声明:

@GwtCompatible(emulated=true)public final class LongMath
   extends Object

方法

S.N. 方法及说明
1 static long binomial(int n, int k)
返回n个选择K,也称为n和k,或为Long.MAX_VALUE的二项式系数,如果long结果不相符。
1 static long checkedAdd(long a, long b)
返回a和b的总和,只要它不会溢出。
2 static long checkedMultiply(long a, long b)
返回a和b的产物,只要它不会溢出。
3 static long checkedPow(long b, int k)
返回b的第k幂,只要它不会溢出。
4 static long checkedSubtract(long a, long b)
返回a和b的差,只要它不会溢出。
5 static long divide(long p, long q, RoundingMode mode)
返回除以p由q,使用指定的RoundingMode四舍五入的结果。
6 static long factorial(int n)
返回n!,也就是说,前n个正整数的乘积,如果n==则返回1,或为Long.MAX_VALUE如果结果long不相符。
7 static long gcd(long a, long b)
返回a, b的最大公约数。
8 static boolean isPowerOfTwo(long x)
返回true,如果x代表两个幂。
9 static int log10(long x, RoundingMode mode)
返回基数为10的对数x,根据指定的舍入模式圆形。
10 static int log2(long x, RoundingMode mode)
返回基数为2-对数x,根据指定的舍入模式圆形。
11 static long mean(long x, long y)
返回x和y的算术平均值,四舍五入向负无穷大。
12 static int mod(long x, int m)
返回x模m,一个非负的值小于m以下。
13 static long mod(long x, long m)
返回x模m,一个非负的值小于m以下。
14 static long pow(long b, int k)
返回b为第k幂。
15 static long sqrt(long x, RoundingMode mode)
返回x的平方根,大概指定的舍入模式。

方法继承

这个类继承了以下类方法:

  • java.lang.Object

LongMath 示例

使用所选择的任何编辑器创建下面的java程序 C:/> Guava

GuavaTester.java

import java.math.RoundingMode;
import com.google.common.math.LongMath;
public class GuavaTester {

   public static void main(String args[]){
      GuavaTester tester = new GuavaTester();
      tester.testLongMath();
   }

   private void testLongMath(){
      try{
         System.out.println(LongMath.checkedAdd(Long.MAX_VALUE, Long.MAX_VALUE));
      }catch(ArithmeticException e){
         System.out.println("Error: " + e.getMessage());
      }

      System.out.println(LongMath.divide(100, 5, RoundingMode.UNNECESSARY));
      try{
         //exception will be thrown as 100 is not completely divisible by 3 thus rounding
         // is required, and RoundingMode is set as UNNESSARY
         System.out.println(LongMath.divide(100, 3, RoundingMode.UNNECESSARY));
      }catch(ArithmeticException e){
         System.out.println("Error: " + e.getMessage());
      }

      System.out.println("Log2(2): "+LongMath.log2(2, RoundingMode.HALF_EVEN));

      System.out.println("Log10(10): "+LongMath.log10(10, RoundingMode.HALF_EVEN));

      System.out.println("sqrt(100): "+LongMath.sqrt(LongMath.pow(10,2), RoundingMode.HALF_EVEN));

      System.out.println("gcd(100,50): "+LongMath.gcd(100,50));

      System.out.println("modulus(100,50): "+LongMath.mod(100,50));

      System.out.println("factorial(5): "+LongMath.factorial(5));
   }  
 }

验证结果

使用javac编译器编译如下类

C:\Guava>javac GuavaTester.java

现在运行GuavaTester看到的结果

C:\Guava>java GuavaTester

看到结果。

Error: overflow
20
Error: mode was UNNECESSARY, but rounding was necessary
Log2(2): 1
Log10(10): 1
sqrt(100): 10
gcd(100,50): 50
modulus(100,50): 0
factorial(5): 120


相关问答

更多

使用两种不同类型的Guava ListenableFutures的结果(Use the results of two Guava ListenableFutures of different types)

Runnable listener = new Runnable() { private boolean jobDone = false; @Override public synchronized void run() { if (jobDone || !(future1.isDone() && future2.isDone())) { return; } jobDone = true; ...

为什么Guava不为小的ImmutableLists使用专门的类?(Why does Guava not use specialized classes for small ImmutableLists?)

你能帮我理解这里涉及的权衡吗? 这是一个权衡: 性能 - 不分配临时数组可以节省成本。 但是,人们需要进行一些广泛的代码分析和基准测试来量化这种节省。 (我怀疑在大多数应用程序中它都是微不足道的。请阅读@Voo提供的这个链接 !) 可读性 - 拥有一堆额外的重载会使javadoc混乱。 可维护性 - 有一堆重载是以不需要临时对象的方式实现的,这需要大量的复制/粘贴编程,这使得将来的代码维护更加困难。 实用程序 - 这些重载的使用频率是多少? 我希望答案“很少”。 字节码占用空间 - 这些额外的重载 ...

Guava EventBus:暂停活动发布(Guava EventBus: pause event posting)

我尝试了这种模式,使用子类分类从毒丸模式派生: public class SomethingChangedEvent { private final String name; public SomethingChangedEvent(String name) { this.name = name; } @Override public String toString() { ...

番石榴的IntervalTree(IntervalTree in Guava)

Guava没有提供这个,尽管你可以通过找到给定点之前和之后的第一个范围来在RangeSet之上构建这样的东西。 但一般来说,除了类型的比较排序之外,Guava Range对距离,度量或任何其他内容一无所知 。 他们不知道10比15更接近11 。 Guava doesn't provide this, though you might be able to build such a thing on top of a RangeSet by finding the first range befor ...

番石榴,gwt和eclipse(guava, gwt and eclipse)

好的,看看你的进口线。 它看起来像这样吗? import com.google.gwt.thirdparty.guava.common.base.Predicate; 那是错的。 将其更改为: import com.google.common.base.Predicate; 如果您在Eclipse中使用完成辅助 - 控制空格键 - 请研究提供的完成列表。 不要只选择第一个。 向右看,它将以浅灰色文本标识完成源。 如果您正在查看thirdparty.guava,请转到下一个,直到您看到googl ...

从Guava Multimap中的值返回键(Return key from value in Guava Multimap)

Guava为Multimap提供了一种反演方法。 请参见Multimaps.invertFrom 。 如果您不经常需要反演,或者您的multimap很小,这可能对您没问题。 但这种反转是一个昂贵的过程。 您可以通过简单地按照JB Nizet在评论中建议的正向和反向来获得一些效率。 然而,两者都可以是多重映射以允许非唯一性。 Guava supplies an inversion method for Multimap. See Multimaps.invertFrom. This might do ...

Guava ValueGraph的简单示例(Simple example of Guava ValueGraph)

Guava wiki提供了以下使用ValueGraph示例: MutableValueGraph<Integer, Double> weightedGraph = ValueGraphBuilder.directed().build(); weightedGraph.addNode(1); weightedGraph.putEdgeValue(2, 3, 1.5); // also adds nodes 2 and 3 if not already present weightedGraph.p ...

不兼容的库版本selenium / guava(Incompatible library version selenium / guava)

因为你对com.google.guava:guava:23.3 org.seleniumhq.selenium:selenium-java:3.0.1依赖性com.google.guava:guava:23.3使用org.seleniumhq.selenium:selenium-java:3.0.1可能会让你在十字路口。 但是Selenium发行说明清楚地提到了以下番石榴依赖性: Selenium v2.49.0 :Bump guava到19版 Selenium v3.1.0 :需要更新最新的番石 ...

如何正确使用guava Closer(How to use guava Closer properly)

从番石榴自己的解释来看,你必须使用Throwable ,是的。 这是他们的示例代码段: public void foo() throws IOException { Closer closer = Closer.create(); try { InputStream in = closer.register(openInputStream()); OutputStream out = closer.register(openOutputStream()); // d ...

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsync 。 ServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建): 处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。 要使服务执行某些有用的操作,您必须将其转换为RUNNING状态 此状态下的服务正在运行。 这就是为什么你必须在它做任何事之前启动服务的原因。 我还建议不要从构造函数中调用startAsync,而是从创 ...