@Sergey
              
               Here is the code for Airy(x) function written in Java.This program calculates the value of Airy function up to 225 decimal places.
               
                package arbitrary_precision_functions_lib;
import java.math.BigDecimal;
import arbitrary_precision_functions_lib.HelperMethods;
public class ArbitraryPrecisionAi implements Runnable{
	
    private BigDecimal[]a; 
	private Thread[]threads;
	private BigDecimal result;
	private int size,numofThreads;
	private int startLoop,currLoop,endLoop;
	
	
	private class AiRange{
		
	public	int start,end;
	}
	
	
	public ArbitraryPrecisionAi(int size,int numofThreads){
		
		
		
		this.size = size;
		this.numofThreads = numofThreads;
		 a = new BigDecimal[size];
		threads = new Thread[numofThreads];
		startLoop = currLoop = 0;
		endLoop = size;
	}
	
	private synchronized AiRange getAiRange(){
		
		AiRange ar = new AiRange();
		if(currLoop > endLoop)
			return null;
		
		ar.start = currLoop;
		currLoop += (endLoop - startLoop)/numofThreads+1;
		ar.end =  (currLoop < endLoop)?currLoop:endLoop;
		
		return ar;
		
	}
	
	public void run(){
		  
		   AiRange ar2;
		   
		   while((ar2 = getAiRange())  != null){
			   multiThreadedAi(ar2.start,ar2.end,0.001);
			   System.out.println("Current thread = " + Thread.currentThread() + " ");
			   
		   }
	}
	
	
	public void multiThreadedAi(int start,int end,double inc){
		
		if( inc == 0.0)
			throw new IllegalArgumentException("arg inc cannot be  equal to zero");
		
		double x;
		 
		 x = 0;
		BigDecimal sum = BigDecimal.ZERO;
		BigDecimal term1 = BigDecimal.ZERO;
		BigDecimal term2 = BigDecimal.ZERO;
		          
		for(int i = start;i < end;i++){
			x += inc;
		  
			BigDecimal x1 = BigDecimal.valueOf(x);
			BigDecimal x2 = x1;
			BigDecimal c1 = BigDecimal.valueOf( 0.355028053887817);
			BigDecimal c2 = BigDecimal.valueOf(0.258819403792807);
			//double f_part,g_part,f_arg,g_arg,c1,c2;
  			
  			BigDecimal fcoef1 = new BigDecimal("0.1666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667");
            BigDecimal fcoef2 = new BigDecimal("0.005555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556");
            BigDecimal fcoef3 = new BigDecimal("0.00007716049382716049382716049382716049382716049382716049382716049382716049382716049382716049382716049383");
            BigDecimal fcoef4 = new BigDecimal("5.845491956603067714178825289936401047512158623269734380845491956603067714178825289936401047512158623e-7");
            BigDecimal fcoef5 = new BigDecimal("2.783567598382413197228012042826857641672456487271302086116900931715746530561345376160190975005789821e-9");
            BigDecimal fcoef6 = new BigDecimal("9.096626138504618291594810597473390985857700938795104856591179515410936374383481621438532598058136669e-12");
            BigDecimal fcoef7 = new BigDecimal("2.165863366310623402760669189874616901394690699713120203950280837002603898662733719390126809061461112e-14");
            BigDecimal fcoef8 = new BigDecimal("3.923665518678665584711357228033726270642555615422319210054856588772833149751329201793707987430183173e-17");
            BigDecimal fcoef9 = new BigDecimal("5.589267120624879750301078672412715485245805719974813689536832747539648361469129917085054113148409079e-20");
            BigDecimal fcoef10 = new BigDecimal("6.424444966235493965863308818865190212926213471235418033950382468436377426976011398948338061090125378e-22");
            BigDecimal fcoef11 = new BigDecimal("6.083754702874520801006921229985975580422550635639600410937862186019296805848495642943501951789891456e-25");
            BigDecimal fcoef12 = new BigDecimal("4.828376748313111746830889865068234587636944948920317786458620782554997464959123526145636469674517029e-28");
            
  			
  			
            BigDecimal gcoef1 = new BigDecimal("0.08333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333");
            BigDecimal gcoef2 = new BigDecimal("0.001984126984126984126984126984126984126984126984126984126984126984126984126984126984126984126984126984");
            BigDecimal gcoef3 = new BigDecimal("0.00002204585537918871252204585537918871252204585537918871252204585537918871252204585537918871252204585538");
            BigDecimal gcoef4 = new BigDecimal("1.413195857640302084746529190973635418079862524306968751413195857640302084746529190973635418079862524e-7");
            BigDecimal gcoef5 = new BigDecimal("5.888316073501258686443871629056814241999427184612369797554982740167925353110538295723480908666093851e-10");
            BigDecimal gcoef6 = new BigDecimal("1.737381935562572339700344898525535302663307861488498265626270824451461228589233787414424191552196750e-12");
            BigDecimal gcoef7 = new BigDecimal("3.760566960092147921429317962176483339098068964260818756766819966345154174435570968429489592104321971e-15");
            BigDecimal gcoef8 = new BigDecimal("6.267611600153579869048863270294138898496781607101364594611366610575256957392618280715815986840536618e-18");
            BigDecimal gcoef9 = new BigDecimal("8.290491534594682366466750357531929759916377787171117188639373823512244652635738466555312151905471716e-21");
            BigDecimal gcoef10 = new BigDecimal("8.914507026445895017706183180141859956899330953947437837246638519905639411436277921027217367640292168e-24");
            BigDecimal gcoef11 = new BigDecimal("7.945193428204897520237239910999875184402255752181317145496112762839250812331798503589320292014520649e-27");
            BigDecimal gcoef12 = new BigDecimal("5.964859931084757898076005939189095483785477291427415274396481053182620729978827705397387606617507995e-30");
            
            BigDecimal f_arg = BigDecimal.valueOf(0);
            BigDecimal g_arg = BigDecimal.valueOf(0);
            BigDecimal f_part = BigDecimal.valueOf(0);
            BigDecimal g_part = BigDecimal.valueOf(0);
            BigDecimal one = BigDecimal.ONE;
            f_arg = x1.pow(3);
            g_arg = x1.pow(4);
            
            // Example of Horner scheme polynomial multiplication for BigDecimal polynomial
            f_part = one.add(f_arg.multiply(fcoef1)).add(f_arg.multiply(fcoef2)).add(f_arg.multiply(fcoef3)).add(f_arg.multiply(fcoef4)).add(f_arg.multiply(fcoef5)).add(f_arg.multiply(fcoef6)).add(f_arg.multiply(fcoef7)).add(f_arg.multiply(fcoef8)).add(f_arg.multiply(fcoef9)).add(f_arg.multiply(fcoef10)).add(f_arg.multiply(fcoef11)).add(f_arg.multiply(fcoef12));
            g_part =  x2.add(g_arg.multiply(gcoef1)).add(g_arg.multiply(gcoef2)).add(g_arg.multiply(gcoef3)).add(g_arg.multiply(gcoef4)).add(g_arg.multiply(gcoef5)).add(g_arg.multiply(gcoef6)).add(g_arg.multiply(gcoef7)).add(g_arg.multiply(gcoef8)).add(g_arg.multiply(gcoef9)).add(g_arg.multiply(gcoef10)).add(g_arg.multiply(gcoef11)).add(g_arg.multiply(gcoef12));
            		
            term1 = c1.multiply(f_part);
            term2 = c2.multiply(g_part);
            
            sum = term1.subtract(term2);
            
            a = sum;
        
  			
					
					
			
			
			
			
		}         
		}
	
	public BigDecimal[] getBigDecimalAi(){
		
		for(int i = 0;i < numofThreads;i++){
			
			threads = new Thread(this);
			threads.setName(Integer.toString(i));
			threads.start();
			System.out.println("Active threads =" + Thread.activeCount() + " "
					+ "names = " + threads.getName() + " " + " threads status = " + threads.getState()
					+ " ");
		}
		
		for(int i = 0;i < numofThreads;i++){
			
			try{
				   threads.join();
				   
			}catch(InterruptedException e){
				
				e.printStackTrace();
			}
		}
		
		return a;
	}
		
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigDecimal[]test;
		
		
	  ArbitraryPrecisionAi ap = new ArbitraryPrecisionAi(10,2);
	   long start,end;
	   start = System.nanoTime();
	   test = ap.getBigDecimalAi();
	   end = System.nanoTime();
	   for(int i = 0;i < test.length;i++){
		   System.out.println("test = " + test + " " + " precision = " + test.precision() + " " );
	   }
            System.out.println("running time is = " + (end - start));
	}
}