Java pro fyziky
Michal Voců
ÚVT UK

Obsah

Historie jazyka Java

Hlavní rysy

Obecná charakteristika

Datové typy

Základní

TypPopisDefaultVelikost
booleantrue nebo falsefalse1 bit
charUNICODE znak\u000016 bitů
bytecelé číslo se znaménkem08 bitů
shortcelé číslo se znaménkem016 bitů
intcelé číslo se znaménkem032 bitů
longcelé číslo se znaménkem064 bitů
floatIEEE 754 floating-point0.032 bitů
doubleIEEE 754 floating-point0.064 bitů

Odvozené

Objekty, třídy a interfacy

Výjimky

public void open() throws IOException { } try { } catch(ExceptionType1 e) { } catch(ExceptionType2 e) { } finally { }

Vzdálené volání metod

Rozdíly proti jazykům C a C++

Výkon

import java.lang.Math; public class DWhet { public static double t1, t2, t3; public static int j, k, l; public static double e1[]; public static void main(String[] args) { int i, isave; int n2, n3, n4, n6, n7, n8, n9, n11; int inner, outer, kount, npass, max_pass; double x, y, z; double whet_save, dif_save, kilowhet; double begin_time, end_time, dif_time; double error, whet_err, percent_err; double secnds; e1 = new double[5]; npass = 0; max_pass = 2; inner = 1000; outer = 20; while(npass < max_pass) { System.out.print("Pass number: "); System.out.println(npass); kount = 0; while(kount < outer) { t1 = 0.499975; t2 = 0.50025; t3 = 2.0; isave = inner; n2 = 12 * inner; n3 = 14 * inner; n4 = 345 * inner; n6 = 210 * inner; n7 = 32 * inner; n8 = 899 * inner; n9 = 616 * inner; n11 = 93 * inner; e1[1] = 1.0; e1[2] = -1.0; e1[3] = 1.0; e1[4] = -1.0; // Loop 2 for(i = 1; i <= n2; i++) { e1[1] = ( e1[1] + e1[2] + e1[3] - e1[4]) * t1; e1[2] = ( e1[1] + e1[2] - e1[3] + e1[4]) * t1; e1[3] = ( e1[1] - e1[2] + e1[3] + e1[4]) * t1; e1[4] = (-e1[1] + e1[2] + e1[3] + e1[4]) * t1; } // Loop 3 for(i = 1; i <= n3; i++) { sub1(e1); } // Loop 4 j = 1; for (i = 1; i <= n4; i++) { if(j - 1 != 0) { j = 2; } else { j = 3; } if(j - 2 != 0) { j = 1; } else { j = 0; } if(j - 1 != 0) { j = 1; } else { j = 0; } } // Loop 6 j = 1; k = 2; l = 3; for(i = 1; i <= n6; i++) { j = j * (k - j) * (l - k); k = l * k - (l - j) * k; l = (l - k) * (k + j); e1[l - 1] = j + k + l; e1[k - 1] = j * k * l; } // Loop 7 x = 0.5; y = 0.5; for(i = 1; i <= n7; i++) { x = t1 * Math.atan( t3 * Math.sin( x ) * Math.cos( x ) / (Math.cos( x + y ) + Math.cos( x - y ) - 1.0) ); y = t1 * Math.atan( t3 * Math.sin( y ) * Math.cos( y ) / (Math.cos( x + y ) + Math.cos( x - y ) - 1.0) ); } // Loop 8 x = 1.0; y = 1.0; z = 1.0; for(i = 1; i <= n8; i++) { sub2(x,y,z); } // Loop 9 j = 1; k = 2; l = 3; e1[1] = 1.0; e1[2] = 2.0; e1[3] = 3.0; for(i = 1; i <= n9; i++) { sub3(); } // Loop 11 x = 0.75; for(i = 1; i <= n11; i++) { x = Math.sqrt( Math.exp( Math.log( x ) / t2 ) ); } inner = isave; kount = kount + 1; } npass = npass + 1; if(npass < max_pass) { inner = inner * max_pass; } } } public static void sub1(double[] e) { for(int i = 1; i <= 6; i++) { e[1] = (e[1] + e[2] + e[3] - e[4]) * t1; e[2] = (e[1] + e[2] - e[3] + e[4]) * t1; e[3] = (e[1] - e[2] + e[3] + e[4]) * t1; e[4] = (-e[1] + e[2] + e[3] + e[4]) / t3; } } public static void sub2(double x, double y, double z) { double x1, y1; x1 = x; y1 = y; x1 = (x1 + y1) * t1; y1 = (x1 + y1) * t1; z = (x1 + y1) / t3; } public static void sub3() { e1[j] = e1[k]; e1[k] = e1[l]; e1[l] = e1[j]; } }

Použití v rozsáhlých výpočtech