Seite 3 von 4

Verfasst: 08.03.2008 18:06
von Tombi
Äh ja, danke :mrgreen:

Kaeru hat`s ja schon editiert :wink:


Bis bald,
"Freunde".


- Tombi -

Verfasst: 08.03.2008 18:07
von AND51
So, hier mal ein kompletter Speedtest.
Ja, STARGATE ist schneller als ich, bei 1<<24 (16,7 Mio.) Durchläufen ist er ca. 24% schneller als meine beiden Prozedürchen.

Allerdings hat STARGATE den Fehler drin, dass er die Fälle, in denen Wert=A=B ist, inkorrekt abhandelt. 6 liegt also so gesehen zwischen 6 und 6. Mathematisch:
Wert € [A; B] ( <--- ist das richtig, SG? ^^ )
Der Fehler an sich ist nicht weiter tragisch, aber ich habe die Vermutung, dass der Operator '<=' langsamer ist, als '<'. Durch STARGATES kleinen Fehler nimmt er nämlich letzteren Operator, während ich auf den ersten setze.

Anbei der komplette Speedtest:

Code: Alles auswählen

Procedure BetweenSG(Vaiable, Wert1, Wert2) 
 If Wert1 > Wert2 
  If Vaiable > Wert2 And Vaiable < Wert1 
   ProcedureReturn 1 
  EndIf 
 Else 
  If Vaiable > Wert1 And Vaiable < Wert2 
   ProcedureReturn 1 
  EndIf 
 EndIf 
EndProcedure 

Procedure Between(Wert, A, B)
	If A <= B
		If A <= Wert And Wert <= B
			ProcedureReturn 1
		EndIf
	Else
		ProcedureReturn Between(Wert, B, A)
	EndIf
EndProcedure

Procedure Between2(Wert, A, B)
	If B < A
		Swap A, B
	EndIf
	If A <= Wert And Wert <= B
		ProcedureReturn 1
	EndIf
EndProcedure


Define a, b,c, i, n, x
#loops=1234567890

a=ElapsedMilliseconds()
For n=1 To #loops
	BetweenSG(8192, -128, -256)
	BetweenSG(2, 1, 3)
	BetweenSG(1<<24, 1<<24, 1<<24)
Next
a=ElapsedMilliseconds()-a

b=ElapsedMilliseconds()
For i=1 To #loops
	Between(8192, -128, -256)
	Between(2, 1, 3)
	Between(1<<24, 1<<24, 1<<24)
Next
b=ElapsedMilliseconds()-b

c=ElapsedMilliseconds()
For i=1 To #loops
	Between2(8192, -128, -256)
	Between2(2, 1, 3)
	Between2(1<<24, 1<<24, 1<<24)
Next
c=ElapsedMilliseconds()-c

MessageRequester(Str(#loops)+" Loops:", "STARGATE:"+#TAB$+Str(a)+" ms"+#CRLF$+"AND51:"+#TAB$+#TAB$+Str(b)+" ms"+#CRLF$+"AND51_2:"+#TAB$+Str(c)+" ms")

Verfasst: 08.03.2008 18:13
von STARGÅTE
also between heißt doch zwischen !

und wenn ich zwischen zwei Wänden stehe, stehe ich ganz bestimmt nicht in einer der beiden Wände.

aber wenn du es willst kann man gerne ein = dazunehmen und damit ein Intervall mit Grenzen definieren.

wie gesagt gibs Swap nicht, also bleibt nur noch deine einstufige rekursion oder meine Procedure mit den = oder ohne

Verfasst: 08.03.2008 18:23
von AND51
Natürlich heißt between zwischen, aber mathematisch ist die Sache eindeutig. Ich werde diesbezüglich mal meinen Mathelehrer fragen. Wenn ich mir die mathematische Notation
Wert € [A; B] | A=B
ansehe, bin ich immer überzeuger davon, dass auch sprachlich gesehen "6 zwischen 6 und 6 liegt". In der Sprache hört sich dies doof und komisch an, aber mathematisch macht das IMHO einen Sinn.

0,999999... (Periode 9) = 1
Auch so ein Beispiel, was ich persönlich nicht nachvollziehen kann. Es gilt:
1/9 = 0,11111...
2/9 = 0,22222...
...
9/9 = 0,99999...
Da 1/9 bis 8/9 Perioden ergeben, gilt das auch für 9/9.
Daher:
0,99999... = 9/9 = 1.

Dass es Swap in 3.30 noch nicht gibt, merke ich auch grade^^.
Das macht mich nur noch froher, dass ich stets die aktuellste PB Version benutze... <)

Verfasst: 08.03.2008 18:31
von Tombi
9/9 = 0,9999 ... = 1
Wie heißt es doch so schön?
"Tja, so ist das Leben..." :mrgreen:

Verfasst: 08.03.2008 18:40
von ZeHa
Tombi hat geschrieben:Mh, mir fällt momentan immer wieder auf wie praktisch eine Procedure sein kann. Danke dir!
Das ist ein Stichwort... ich finde, man sollte generell den Anfängern die Procedures schmackhaft machen, sowas ist das A und O. Die Frage ist nur, wie ;) vielleicht gibt's zu viele Anfänger-Tutorials, in denen nicht auf Procedures eingegangen wird.

Es gibt hier auch leider immer wieder Code zu sehen, in dem viel mit Gosub rumhantiert wird... das ist nicht grad förderlich, wenn die Leute später evtl. auf andere Sprachen umsteigen wollen (außer vielleicht Assembler, aber da hat man dann eh andere Sorgen :mrgreen: ).

Verfasst: 08.03.2008 18:43
von ZeHa
AND51 hat geschrieben:0,999999... (Periode 9) = 1
Auch so ein Beispiel, was ich persönlich nicht nachvollziehen kann. Es gilt:
1/9 = 0,11111...
2/9 = 0,22222...
...
9/9 = 0,99999...
Da 1/9 bis 8/9 Perioden ergeben, gilt das auch für 9/9.
Daher:
0,99999... = 9/9 = 1.
Hmm, Du kannst es nicht nachvollziehen, aber erklärst es? :?
Also scheinst Du es ja doch nachvollziehen zu können ;)

Verfasst: 08.03.2008 18:47
von STARGÅTE
das die 9er Periode 1 ist kannst du anders beweisen:

Code: Alles auswählen

         _
 1/3 = 0,3 | *10
         _
10/3 = 3,3 | *3
         _
  10 = 9,9 | -9
         _ 
   1 = 0,9 

Verfasst: 08.03.2008 18:49
von AND51
Was ich nicht verstehe ist, dass ein "glatter" Bruch wie 9/9 auch 0,9999... sein kann.
Brüche, bei denen Zähler=Nenner ist, sind für mich glatte Zahlen, also 5/5=1, 4/2=2, und so weiter.
Warum 9/9 eine Ausnahme sein soll, begreife ich nicht.

So, wie ich es erklärt habe, wurde es uns auch in der Schule erklärt. Sagen wir's so:
Ich kann 1=0,999... erklären und vielleicht auch nachvollziehen, bin damit aber nicht einverstanden.



Edit:
Wow, STARGATE, das nenne ich mal einen Beweis! Der ist mir neu. Cool! :allright:

Verfasst: 08.03.2008 18:53
von STARGÅTE
lool 9/9 ist doch keine ausname,

alles was 1 ist auch auch 0,9¯

also ist auch 1/1 = 0,9¯ oder 1,9¯ - 0,9¯ = 0,9¯

kein mensch rechnet mit der 9er Periode, aber es muss halt definiert sein

ist doch ein ähnlicher fall mit x^0 = 1.

Du hast eine Zahl die du nie mit sich selber multiplizierst, ergebnis ist 1 :o