PlanetSwitch Planet3DS PlanetVita PSP.de PlanetiPhone Classics Forum Handheld-Wiki

PGN-ID:[?] (Nicht eingeloggt)
Login
Registrieren
PlanetDS PlanetGameboy N-Page.de
portablegaming.de  

Zurück   portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung


Development Abteilung Ihr wollt für euren Lieblingshandheld Spiele oder Tools entwickeln?
Bitte die Präfixe benutzen!

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 12.11.2005, 20:07   #1
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard Softwarelösung für Floats

Wie ein Rechenwerk mit Integerwerten rechnet, findet man ja recht viel im Internet, aber wie eine FPU arbeitet nicht.

Der GBA, oder PMini z. B. haben keine FPU als Koprozessor. Dennoch braucht man natürlich Floats.

Also wie rechnet man mit Floats? Wie werden sie addiert, subtrahiert, multipliziert, dividiert, potenziert usw. ?

Bis auf die IEEE Formate konnte ich nix finden.

mfg olli
Vertex ist offline   Mit Zitat antworten
Sponsored Links
Alt 13.11.2005, 19:28   #2
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

Puuuuuuu, dass ist eine sehr gute Frage. Mach doch einfach mal ein mini progg mit einer float rechnung (gba gcc z.B.) und dissassemblier es?
Soweit ich weiß, emuliert der compiler dort die rechnung .. da kannst du dann sehen wie er es macht.

Aber alles was ich sonst noch weiß, ist das man beim gba und co immer FIXED Werte nimmt ..
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Alt 14.11.2005, 22:03   #3
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

Aber kurz zum aufbau von floats.
Floats sind aufgebaut mit 3 kompenenten.

multiplikator * basis ^ exponent

z.B.

2.35 * 10^-2 = 0,0235
2.35 * 10^2 = 235

Die dafür notwendigen Rechenschritte musst du dir leider selbst ermitteln, ich hab sie nimmer im Kopf ... kann aber notfalls nochmal nachschaun. Durch die 3 Kompenenten kannst adu auf jeden fall ausreichend Gleitkommazahlen ermitteln ...
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Alt 15.11.2005, 12:58   #4
 
Registriert seit: 20.04.2005
Alter: 38

Meridian hat die Renommee-Anzeige deaktiviert

Meridian eine Nachricht über ICQ schicken
Standard

Wenn floats nicht gehen, leider auf vielen mobilen Geräten, kann man sich ja entweder floats emulieren lassen oder aber man verwendet Fixpunkt.
Ich hab für meine 3D Engine für PPC und Symbian auch Fixpunkt verwendet.
Es gibt hier allerdings eine kleinigkeit zu beachten, ich verwende, um die Genauigkeit nicht komplett zu verlieren, __int64 was auch wieder emuliert wird, allerdings ist der Geschwindigkeits verlust, dieser emulierung nicht so gravierend. Das verwendete Format ist 15:16(Vorzeichenbit) Sprich 16bits für nachkommastellen. Für mich hat dies bisher eigentlich immer gereicht.
Fixpunkt addition und subtraktion ist übrigens identisch zur normalen integer arithmetik.

Ich weiss leider nichts über GBA Programmierung, aber vielleicht ist das hier für jemanden nützlich ^^
Code:
typedef signed int CFix;

	class Fix16
	{
	public:

		static CFix		FixPI;			///< pre calculated PI in fixpoint

		/// \brief multiplys 2 fixpoint values and returns the fixpoint value
		__forceinline static CFix	Mul(CFix x, CFix y)
		{
			__int64 i64 = x;
			i64 *= y;
			
			#ifdef FIX_DEBUG
				int debTmp = i64>>16;
		

			if ((x>0&&y>0)||(x<0&&y<0)) 
				_ASSERT(debTmp > 0 );
			else 
				_ASSERT(debTmp <= 0 );
			
				return debTmp;
			#endif
			
			return (int)( i64 >> 16 );
		}

		/// \brief divides 2 fixpoint values and returns the fixpoint value
		__forceinline static CFix	Div(CFix x, CFix y)
		{
			__int64 i64 = x;
			i64 <<= 16;
						
			#ifdef FIX_DEBUG
				int ret = (i64) / y;

				if ((x>0&&y>0)||(x<0&&y<0)) 
					_ASSERT(ret > 0 );
				else 
					_ASSERT(ret <= 0 );
			
				return ret;
			#endif

			return (int)( i64 / y );
		}
		
		/// \brief convertes a normal int to fixpoint
		__forceinline static CFix	IntFix(int x)
		{
			return (x << 16);
		}

		/// \brief convertes fixpoint back to int
		__forceinline static int	FixInt(CFix x)
		{
			return (x >> 16);
		}

		/// \brief convertes a float to fixpoint
		__forceinline static CFix	FloatFix(float x)
		{
			return (CFix)(x * 65535.f);
		}

		/// \brief convertes a fixpoint back to float
		__forceinline static float	FixFloat(CFix x)
		{
			return (x / 65535.f);
		}

		/// \brief ceils a fixpoint
		__forceinline static CFix Ceil(CFix x)
		{
			int int_part = Fix16::FixInt(x);
			return Fix16::IntFix(int_part + 1 );
		}

	};

// Fixpoint.cpp
CFix Fix16::FixPI = 205884;
Meridian ist offline   Mit Zitat antworten
Alt 15.11.2005, 13:23   #5
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

Hmm soweit ich das verstanden habe, geht es Vertex um die Float emulierung aufm Pokemon Mini.. Fixpunkt kennt er sicherlich auch schon
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Alt 15.11.2005, 13:29   #6
 
Registriert seit: 20.04.2005
Alter: 38

Meridian hat die Renommee-Anzeige deaktiviert

Meridian eine Nachricht über ICQ schicken
Standard

Rein vom ThreadTitel her würde es passen

Dann verstehe ich die Frage aber nicht so ganz. Wenn es nur ums verständniss geht, ok. Aber in der Praxis, wird er um eine Fixpunkt ansatz nicht herumkommen.
Wobei mich die Compiler Emulierung auch mal interessieren würde
Meridian ist offline   Mit Zitat antworten
Alt 15.11.2005, 15:16   #7
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

Wieso emulierung? Eine Float emulierung ist nicht mehr, als dass was die fpu per hw macht mühsam mit 4-8 asm befehlen per Hand zu machen. Desshalb hab ich Vertex ja oben kurz aufgeführt wie ein Float zusammen gesetzt ist, damit er das selber machen kann.
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Alt 15.11.2005, 15:38   #8
 
Registriert seit: 20.04.2005
Alter: 38

Meridian hat die Renommee-Anzeige deaktiviert

Meridian eine Nachricht über ICQ schicken
Standard

Zitat:
Wieso emulierung?
Zitat:
Mach doch einfach mal ein mini progg mit einer float rechnung (gba gcc z.B.) und dissassemblier es?
Soweit ich weiß, emuliert der compiler dort die rechnung .. da kannst du dann sehen wie er es macht.
Ich meinte damit ja, das es mich interessiert, was mein Compiler aus floats macht, weil ich es mir noch nicht angeguckt habe.
Meridian ist offline   Mit Zitat antworten
Alt 15.11.2005, 16:21   #9
ehem. Teammitglied
 
Benutzerbild von Tharo
 
Registriert seit: 02.09.2002
Ort: フランクフルト
Spielt gerade: FF7 Remake

Tharo wird schon bald berühmt werdenTharo wird schon bald berühmt werden

Standard

Ich auch nich ^^ Aber warscheinlich das selbe was ich vorgeschlagen habe: CPU vorgehensweise in ASM Befehlen nachbauen ^^
__________________
Ney ney ney. So viel Sand und keine Förmchen

Code:
Hey DU! Join uns im PG Discord! https://discord.gg/SVqutfFpTc
Tharo ist offline   Mit Zitat antworten
Alt 15.11.2005, 17:55   #10
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

http://www.geocities.com/SiliconVall...s/6639/ip/fpu/
Hier habe ich ein paar Infos gefunden.

mfg olli
Vertex ist offline   Mit Zitat antworten
Antwort

  portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an



Alle Zeitangaben in WEZ +2. Es ist jetzt 08:59 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0
Template-Modifikationen durch TMS
PortableGaming.de © bk 2000 - 2010

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231