404 - Not found

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
WinSysCompany
Beiträge: 93
Registriert: 17.10.2010 17:43
Computerausstattung: KNOPPIX 8.1.0 & PureBasic (x68) 32Bit Vollversion
Wohnort: Berlin

404 - Not found

Beitrag von WinSysCompany »

Hallo leute, lang nicht gesehen :bounce: ,
sorry deswegen, bin grad an einem GROßEN Projekt :coderselixir: und hab ( glücklicherweisse ) lang keine Hilfe mehr gebraucht, doch jetzt brauch ich euern rat :praise: ...

Es geht um ein unteprojekt, unzwar hab ich eine xFP-Library geschrieben die ich hier gleich mal aushänge ( ist opensource >:) ):

Code: Alles auswählen

; --[ xFP128lib ]--------------------------------------------------
; |     eXtreme extended Floating Point - Library v0.01 Beta      |
; |     Written by Ronny Barthmann ( RONNIX )                     |
; |     used BigMathLib written by ______________                 |
; -----------------------------------------------------------------

;  Name: | Registers | Bits(F) | Bits(D) | Bits(?) | Multiplex
; -------+-----------+---------+---------+---------+-------------
;   FP   | A         |      32 |      64 |     128 |        1x
;  dFP   | A*B       |      64 |     128 |     256 |        2x
;  eFP   | A*B+C-D   |     128 |     256 |     512 |        4x
;  xFP   | A*B+C-D-E |     160 |     320 |     640 |        5x
;
;    FP = Floating Point
;   dFP = Double Floating Point
;   eFP = Extended Floating Point
;   xFP = eXtreme Floating Point
;      or eXtreme extended Floating Point
;
;    FP = Floating Point
;   dFP = Floating Point with Multiplex
;   eFP = Floating Point with Multiplex and Difference ( + Trimming )
;   xFP = Floating Point with Multiplex, Difference and Double Trimming

Structure FP64
	base.d
EndStructure

Structure dFP64
	base.d
	multiplex.d
EndStructure

Structure eFP64
	base.d
	multiplex.d
	admixture.d
	subtraction.d
EndStructure

Structure xFP64
	base.d
	multiplex.d
	admixture.d
	subtraction.d
	subtraction2.d
EndStructure

Structure FP32
	base.f
EndStructure

Structure dFP32
	base.f
	multiplex.f
EndStructure

Structure eFP32
	base.f
	multiplex.f
	admixture.f
	subtraction.f
EndStructure

Structure xFP32
	base.f
	multiplex.f
	admixture.f
	subtraction.f
	subtraction2.f
EndStructure

Procedure.s FromFP64(a.FP64)
	s.s = _ToStrD(a.FP64\base.d)
	ProcedureReturn s1.s
EndProcedure

Procedure.s FromdFP64(a.dFP64)
	s1.s = _ToStrD(a.dFP64\base.d)
	s2.s = _ToStrD(a.dFP64\multiplex.d)
	s.s = _StrMul(s1.s,s2.s)
	ProcedureReturn s.s
EndProcedure

Procedure.s FromeFP64(a.eFP64)
	s1.s = _ToStrD(a.eFP64\base.d)
	s2.s = _ToStrD(a.eFP64\multiplex.d)
	s3.s = _ToStrD(a.eFP64\admixture.d)
	s4.s = _ToStrD(a.eFP64\subtraction.d)
	s.s = _StrMul(s1.s,s2.s)
	s.s = _StrAdd(s.s,s3.s)
	s.s = _StrSub(s.s,s4.s)
	ProcedureReturn s.s
EndProcedure

Procedure.s FromxFP64(a.xFP64)
	s1.s = _ToStrD(a.xFP64\base.d)
	s2.s = _ToStrD(a.xFP64\multiplex.d)
	s3.s = _ToStrD(a.xFP64\admixture.d)
	s4.s = _ToStrD(a.xFP64\subtraction.d)
	s5.s = _ToStrD(a.xFP64\subtraction2.d)
	s.s = _StrMul(s1.s,s2.s)
	s.s = _StrAdd(s.s,s3.s)
	s.s = _StrSub(s.s,s4.s)
	s.s = _StrSub(s.s,s5.s)
	ProcedureReturn s.s
EndProcedure

Procedure.s FromFP32(a.FP32)
	s.s = _ToStrF(a.FP32\base.f)
	ProcedureReturn s1.s
EndProcedure

Procedure.s FromdFP32(a.dFP32)
	s1.s = _ToStrF(a.dFP32\base.f)
	s2.s = _ToStrF(a.dFP32\multiplex.f)
	s.s = _StrMul(s1.s,s2.s)
	ProcedureReturn s.s
EndProcedure

Procedure.s FromeFP32(a.eFP32)
	s1.s = _ToStrF(a.eFP32\base.f)
	s2.s = _ToStrF(a.eFP32\multiplex.f)
	s3.s = _ToStrF(a.eFP32\admixture.f)
	s4.s = _ToStrF(a.eFP32\subtraction.f)
	s.s = _StrMul(s1.s,s2.s)
	s.s = _StrAdd(s.s,s3.s)
	s.s = _StrSub(s.s,s4.s)
	ProcedureReturn s.s
EndProcedure

Procedure.s FromxFP32(a.xFP32)
	s1.s = _ToStrF(a.xFP32\base.f)
	s2.s = _ToStrF(a.xFP32\multiplex.f)
	s3.s = _ToStrF(a.xFP32\admixture.f)
	s4.s = _ToStrF(a.xFP32\subtraction.f)
	s5.s = _ToStrF(a.xFP32\subtraction2.f)
	s.s = _StrMul(s1.s,s2.s)
	s.s = _StrAdd(s.s,s3.s)
	s.s = _StrSub(s.s,s4.s)
	s.s = _StrSub(s.s,s5.s)
	ProcedureReturn s.s
EndProcedure

Procedure.FP64 ToFP64(s.s)
	; Base
	a.FP64\base.d = _FromStrF(s.s)
	; Result 
	ProcedureReturn a.FP64
EndProcedure

Procedure.dFP64 TodFP64(s.s)
	; Multiplex
	If Left(s.s,1) = "-"
		s2.s = "-"+_StrSqr(LTrim(s.s,"-"))
	Else
		s2.s = _StrSqr(s.s)
	EndIf
	a.dFP64\multiplex.d = _FromStrF(s2.s)
	; Base
	s1.s = _StrDiv(s.s,s2.s)
	a.dFP64\base.d = _FromStrF(s1.s)
	; Result 
	ProcedureReturn a.dFP64
EndProcedure

Procedure.eFP64 ToeFP64(s.s)
	; Multiplex
	If Left(s.s,1) = "-"
		s2.s = "-"+_StrSqr(LTrim(s.s,"-"))
	Else
		s2.s = _StrSqr(s.s)
	EndIf
	a.eFP64\multiplex.d = _FromStrF(s2.s)
	; Base
	s1.s = _StrDiv(s.s,s2.s)
	a.eFP64\base.d = _FromStrF(s1.s)
	; Difference
	s1.s = _ToStrF(a.eFP64\base.d)
	s2.s = _ToStrF(a.eFP64\multiplex.d)
	sTmp.s = _StrMul(s1.s,s2.s)
	s3.s = _StrSub(s.s,sTmp)
	a.eFP64\admixture.d = _FromStrF(s3.s)
	; Trim
	s3.s = _ToStrF(a.eFP64\admixture.d)
	sTmp.s = _StrAdd(sTmp.s,s3.s)
	s4.s = _StrSub(sTmp,s.s)
	a.eFP64\subtraction.d = _FromStrF(s4.s)
	; Result 
	ProcedureReturn a.eFP64
EndProcedure

Procedure.xFP64 ToxFP64(s.s)
	; Multiplex
	If Left(s.s,1) = "-"
		s2.s = "-"+_StrSqr(LTrim(s.s,"-"))
	Else
		s2.s = _StrSqr(s.s)
	EndIf
	a.xFP64\multiplex.d = _FromStrF(s2.s)
	; Base
	s1.s = _StrDiv(s.s,s2.s)
	a.xFP64\base.d = _FromStrF(s1.s)
	; Difference
	s1.s = _ToStrF(a.xFP64\base.d)
	s2.s = _ToStrF(a.xFP64\multiplex.d)
	sTmp.s = _StrMul(s1.s,s2.s)
	s3.s = _StrSub(s.s,sTmp)
	a.xFP64\admixture.d = _FromStrF(s3.s)
	; Trim
	s3.s = _ToStrF(a.xFP64\admixture.d)
	sTmp.s = _StrAdd(sTmp.s,s3.s)
	s4.s = _StrSub(sTmp,s.s)
	a.xFP64\subtraction.d = _FromStrF(s4.s)
	; Trim ( Pass 2 )
	s4.s = _ToStrF(a.xFP64\subtraction.d)
	sTmp.s = _StrSub(sTmp.s,s4.s)
	s5.s = _StrSub(sTmp,s.s)
	a.xFP64\subtraction2.d = _FromStrF(s5.s)
	; Result 
	ProcedureReturn a.xFP64
EndProcedure

Procedure.FP32 ToFP32(s.s)
	; Base
	a.FP32\base.f = _FromStrF(s.s)
	; Result 
	ProcedureReturn a.FP32
EndProcedure

Procedure.dFP32 TodFP32(s.s)
	; Multiplex
	If Left(s.s,1) = "-"
		s2.s = "-"+_StrSqr(LTrim(s.s,"-"))
	Else
		s2.s = _StrSqr(s.s)
	EndIf
	a.dFP32\multiplex.f = _FromStrF(s2.s)
	; Base
	s1.s = _StrDiv(s.s,s2.s)
	a.dFP32\base.f = _FromStrF(s1.s)
	; Result 
	ProcedureReturn a.dFP32
EndProcedure

Procedure.eFP32 ToeFP32(s.s)
	; Multiplex
	If Left(s.s,1) = "-"
		s2.s = "-"+_StrSqr(LTrim(s.s,"-"))
	Else
		s2.s = _StrSqr(s.s)
	EndIf
	a.eFP32\multiplex.f = _FromStrF(s2.s)
	; Base
	s1.s = _StrDiv(s.s,s2.s)
	a.eFP32\base.f = _FromStrF(s1.s)
	; Difference
	s1.s = _ToStrF(a.eFP32\base.f)
	s2.s = _ToStrF(a.eFP32\multiplex.f)
	sTmp.s = _StrMul(s1.s,s2.s)
	s3.s = _StrSub(s.s,sTmp)
	a.eFP32\admixture.f = _FromStrF(s3.s)
	; Trim
	s3.s = _ToStrF(a.eFP32\admixture.f)
	sTmp.s = _StrAdd(sTmp.s,s3.s)
	s4.s = _StrSub(sTmp,s.s)
	a.eFP32\subtraction.f = _FromStrF(s4.s)
	; Result 
	ProcedureReturn a.eFP32
EndProcedure

Procedure.xFP32 ToxFP32(s.s)
	; Multiplex
	If Left(s.s,1) = "-"
		s2.s = "-"+_StrSqr(LTrim(s.s,"-"))
	Else
		s2.s = _StrSqr(s.s)
	EndIf
	a.xFP32\multiplex.f = _FromStrF(s2.s)
	; Base
	s1.s = _StrDiv(s.s,s2.s)
	a.xFP32\base.f = _FromStrF(s1.s)
	; Difference
	s1.s = _ToStrF(a.xFP32\base.f)
	s2.s = _ToStrF(a.xFP32\multiplex.f)
	sTmp.s = _StrMul(s1.s,s2.s)
	s3.s = _StrSub(s.s,sTmp)
	a.xFP32\admixture.f = _FromStrF(s3.s)
	; Trim
	s3.s = _ToStrF(a.xFP32\admixture.f)
	sTmp.s = _StrAdd(sTmp.s,s3.s)
	s4.s = _StrSub(sTmp,s.s)
	a.xFP32\subtraction.f = _FromStrF(s4.s)
	; Trim ( Pass 2 )
	s4.s = _ToStrF(a.xFP32\subtraction.f)
	sTmp.s = _StrSub(sTmp.s,s4.s)
	s5.s = _StrSub(sTmp,s.s)
	a.xFP32\subtraction2.f = _FromStrF(s5.s)
	; Result 
	ProcedureReturn a.xFP32
EndProcedure
jetzt die Fragen :

1. ist das Gut !? :freak:

2.a. kennt ihr eine Library die sich mit OpenSource ( GPL v2 oder höher ) versteht ( damit ich sie einbinden kann ) die mit großen Zahlen ( als String ) effizient rechnen kann ( MUSS nicht schnell sein, währ aber schön :mrgreen: ) sie sollte folgende Befehle unterstützen ( inklammern die Platzhalter vom obigen Code:

Code: Alles auswählen

Float/Double -> String ( _ToStrF() / _ToStrD() )
String -> Float/Double ( _FromStrF() / _FromStrD() )
Add String with String ( _AddStr() )
Sub String from String ( _SubStr() )
Div String by String ( _DivStr() )
Mul String with String ( _MulStr() )
Return square-root from String as String ( _SqrStr() )
3. ist meine Variante zum umgang mit Negativen zahlen ( z.B. am anfang von TodFP64() ) glücklich gewählt ?

4. Hab ich flüchtigkeits fehler gemacht /:-> ( ACHTUNG: Begutachtung setzt voraus das ihr den sinn hinter dem ganzen bullshit seht und das gute in ihm sieht Muhahaha )

ich bin auf jeden fall für Feedback SEHR dankbar ( ihr wisst schon, so mit Herzschen und Blümchen und "Hach ist das gut" :o )

P.S.: Im header steht etwas von "Bits(?)", bitte nicht wundern, ich hab den header schon für 128bit ausgelegt, die ja aber von PureBasic nicht unterstützt werden, wenn es irgendwann mal unterstützt wird, folgen natürlich Funktionen wie "ToxFP128()" u.s.w.
PB-Workstation > PureBasic ( win32 Ver. 5.62 ) über Wine 3.0.2
KNOPPIX 8.0.0 ( GNU/Linux-Debian 9 ), 8GB-RAM, AMD-Athlon(tm) II X4 630, AMD Radeon HD 6850


Nichts ist einfacher als das Komplizierteste

Press Any Key to Continue
ich finde aber keine Any Key Taste auf meiner Tastertur

Was steht den auf ihrem Bildschirm
Na eine Blumenvase ...