# Wird Math.sin bzw. sinus auf Maschinencode abgebildet



## anonym (6. Mai 2007)

Hallo,

ich muss ein Programm schreiben (muss glaube ich jeder hier ;-) ). Dieses Programm wird sehr sehr sehr oft Sinus-Berechnungen durchführen. Jetzt hat mir mal einer gesagt, dass Java für Sinus Operationen nicht die Maschinenbefehle des Prozessors nutzt, wenn der welche hat. Jetzt wollte ich wissen, ob das jemand bestätigen kann? 
Möchte mich ungern noch mit CORDIC oder Lookuptabellen auseinandersetzen.


Danke schonmal

gruß,
Wolle


----------



## Wildcard (6. Mai 2007)

Math.sin ist eine native Implementierung.


----------



## Ullenboom (8. Mai 2007)

Eine gute Frage, insbesondere weil es auf die JVM-Implementierung ankommt. Trigonometrische Berechnungen sind echt ein Problem, insbesondere, weil sie alle strictfp durchgeführt werden (siehe Quellcode). Die Berechung ist zwar native doch muss der Fließkommaprozessor mitunter den IEEE 754 Standard nachbilden, um auf ein exaktes reproduzierbares (eben strictfp) Ergebnis zu kommen. Eine oft diskutierte Lösung ist eine native C-Funktion zu nutzen, die direkt SIN vom Fließkommaprozessor nutzt, ohne die in IEEE 754 beschriebene Lösung zu berechnen. (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5005861) Das Problem ist in Java 6 angegangen worden (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5005861) aber nicht abschließend gelöst. Vielleicht doch die Sin-Tabellen wie unter http://forums.java.net/jive/thread.jspa?messageID=12781&tstart=0 

Grüße

 Christian


----------



## AlArenal (8. Mai 2007)

Wenn du dein Programm eh in Java schreiben musst, kann es dir doch egal sein, denn ändern kannst du es nicht


----------



## Wildcard (9. Mai 2007)

Ullenboom hat gesagt.:
			
		

> Eine gute Frage, insbesondere weil es auf die JVM-Implementierung ankommt. Trigonometrische Berechnungen sind echt ein Problem, insbesondere, weil sie alle strictfp durchgeführt werden (siehe Quellcode). Die Berechung ist zwar native doch muss der Fließkommaprozessor mitunter den IEEE 754 Standard nachbilden, um auf ein exaktes reproduzierbares (eben strictfp) Ergebnis zu kommen.


Das ist zwar alles korrekt, aber wie AlArenal schon erwähnt für den OP irrelevant.
Eine nicht-strictfp Methode per JNI einzubinden dürfte wesentlich mehr Overhead erzeugen von daher muss er einfach mit dem leben was die VM hergibt. 
Es sei denn natürlich er möchte die Vorzüge von OpenSource voll auskosten und die VM anpassen, dann nehme ich alles Gesagte natürlich zurück.  :wink:


----------



## Ullenboom (9. Mai 2007)

Aus "ich muss ein Programm schreiben" kann ich nicht schließen, dass es pures Java sein *muss*. Aber gut. Wenn es so sein soll, dann sehe ich auch nur Lookup-Tabellen oder iterative Annäherungsalgorithmen. Da man bei Optimierung aber nicht nur auf Mikro-Ebene sucht, kann uns anonym bestimmt noch schreiben, in welchem Kontext er sin einsetzt.


----------



## anonym (1. Jun 2007)

hm... etwas spät meine Antwort, war aber länger Zeit nicht verfügbar. 
Erstmal danke für eure Bemühungen und Informationen. 
Mein Kontext ist sphärische Geometrie. 
Um nur einen sin auszuführen, würde ich nicht auf JNI Implementierung zurückgreifen. Wenn dann würde ich versuchen ein Array mit zuberechnen Daten an JNI zu übergeben.
Aber werde wohl auf Lookuptabellen zurückgreifen und danach mir mal nen Account machen


----------

