Ich schreibe eine sehr rechenintensive Prozedur für ein mobiles Gerät und bin auf 32-Bit-CPUs beschränkt. Im Wesentlichen führe ich Punktprodukte von riesigen Datensätzen durch (>12k vorzeichenbehaftete 16-Bit-Ganzzahlen). Fließkommaoperationen sind einfach zu langsam, also habe ich nach einer Möglichkeit gesucht, die gleiche Berechnung mit Ganzzahltypen durchzuführen. Ich stieß auf etwas namens Block Fließkomma Arithmetik (Seite 17 in dem verlinkten Dokument). Es macht einen ziemlich guten Job, aber jetzt stehe ich vor dem Problem, dass 32 Bit einfach nicht ausreichen, um die Ausgabe meiner Berechnung mit ausreichender Präzision zu speichern.
Nur um klarzustellen, der Grund, es ist nicht genug Präzision ist, dass ich drastisch Präzision jedes meiner Arrays "Elemente zu reduzieren, um eine Zahl passend in eine 32-Bit-Ganzzahl am Ende zu erhalten. Es ist die Summierung von ~16000 Dinge, die mein Ergebnis so riesig macht.
Gibt es eine Möglichkeit (ich würde gerne einen Verweis auf einen Artikel oder ein Tutorial), um zwei 32-Bit-Ganzzahlen als höchstwertiges Wort und niedrigstwertiges Wort zu verwenden et Arithmetik auf ihnen definieren (+, -, *, /), um Daten effizient zu verarbeiten? Gibt es vielleicht auch bessere Möglichkeiten, solche Dinge zu tun? Gibt es ein Problem mit diesem Ansatz? Ich bin ziemlich flexibel, was die von mir verwendete Programmiersprache angeht. Ich würde C/C++ bevorzugen, aber Java geht auch. Ich bin sicher, jemand hat das schon mal gemacht.
8 Stimmen
Ich habe eine dumme Frage - warum kann man einen Long, der 64 Bit ist, nicht auch auf einem 32-Bit-CPU verwenden?
0 Stimmen
Die dumme Antwort ist: Ja, man kann. Ich wurde durch ein Stück Dokumentation in die Irre geführt. Danke = )
0 Stimmen
Erwägen Sie den Wechsel zu nativem Code.
0 Stimmen
@MJB In der Tat
long
ist in der Regel 32 Bit auf einem 32-Bit-System (obwohl dies nicht erforderlich ist), währendlong long
falls vorhanden, ist der 64-Bit-Integraltyp.2 Stimmen
Nicht in Java - in Java ist short immer 16 Bit, integer 32 Bit, long 64 Bit. Keine longs hier
1 Stimmen
Die Interpretation von C++, wie viele Bits den Datentypen zugeordnet werden, ist compilerabhängig. In Java erhalten Sie immer die gleiche Bit-Darstellung.