1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.commons.numbers.gamma; 19 20 /** 21 * Encapsulate the policy for function evaluation. 22 * This is a reduced implementation of the Boost {@code boost::math::policies} 23 * functionality. No settings are preserved for the error handling policy or 24 * promotion of data types for computations. 25 * This controls the convergence criteria and maximum iterations for series evaluations. 26 * 27 * @see <a href="https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/policy.html"> 28 * Policies: Controlling Precision, Error Handling etc</a> 29 */ 30 final class Policy { 31 /** Default policy. The Boost default uses 2^-52 for the epsilon. This uses 32 * 2^-53 to use an extra guard digit in the Kahan series summations. 33 * The minimum value for the Commons continued fraction epsilon is also 2^-53. */ 34 private static final Policy DEFAULT = new Policy(0x1.0p-53, 1000000); 35 36 /** Epsilon value for relative error. */ 37 private final double eps; 38 /** The maximum number of iterations permitted in a series evaluation. */ 39 private final int maxIterations; 40 41 /** 42 * Instantiates a new policy. 43 * 44 * @param eps the eps 45 * @param maxIterations the maximum number of iterations permitted in a series 46 * evaluation 47 */ 48 Policy(double eps, int maxIterations) { 49 this.eps = eps; 50 this.maxIterations = maxIterations; 51 } 52 53 /** 54 * Gets the default. 55 * 56 * @return the default policy 57 */ 58 static Policy getDefault() { 59 return DEFAULT; 60 } 61 62 /** 63 * Gets the epsilon value for relative error. 64 * 65 * @return the epsilon 66 */ 67 double getEps() { 68 return eps; 69 } 70 71 /** 72 * Gets the maximum number of iterations permitted in a series evaluation. 73 * 74 * @return max iterations 75 */ 76 int getMaxIterations() { 77 return maxIterations; 78 } 79 }