AW: doppelt geexcelt und makrotisert
24.04.2010 21:49:36
fcs
Hallo an ale Mitstreiter,
bei den Vorgaben mit der 2 vom Ende an den Anfang und b/a = 2 bzw. (b-2*a)=0
müssen alle Lösungen mit 1 beginnen.
Mit roher Gewalt kann man ca. 8 bis 9 Ziffern versuchen zu lösen.
Weitere Lösungen nur durch verwenden bereits gefundener Treffer/Näherungen.
Das Ergebnis ist aber das es bis 15-Ziffern keine Lösungen gibt und dann schlägt die Rechengenauigkeit von Excel zu.
Tabelle4
| A | B | C | D |
1 | a | b | (b - 2 * a) | b/a |
2 | 12 | 21 | -3 | 1,75000000000000 |
3 | 102 | 210 | 6 | 2,05882352941176 |
4 | 1.052 | 2.105 | 1 | 2,00095057034221 |
5 | 10.522 | 21.052 | 8 | 2,00076031172781 |
6 | 105.262 | 210.526 | 2 | 2,00001900020900 |
7 | 1.052.632 | 2.105.263 | -1 | 1,99999905000038 |
8 | 10.526.312 | 21.052.631 | 7 | 2,00000066500024 |
9 | 105.263.162 | 210.526.316 | -8 | 1,99999992400000 |
10 | 1.052.631.582 | 2.105.263.158 | -6 | 1,99999999430000 |
11 | 105.263.157.892 | 210.526.315.789 | 5 | 2,00000000004750 |
12 | 1.052.631.578.952 | 2.105.263.157.895 | -9 | 1,99999999999145 |
13 | 10.526.315.789.472 | 21.052.631.578.947 | 3 | 2,00000000000029 |
14 | 105.263.157.894.732 | 210.526.315.789.473 | 9 | 2,00000000000009 |
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Wahrscheinlich gibt es keine Lösung, die als Ergebnis genau 2 für b/a ergibt. Aber das interessiert mich als Nicht-Mathematiker dann auch nicht so sehr.
Hier meine Makros für den Lösungsansatz.
Gruß
Franz
Sub bbTest()
'Reduzierter Rechenaufwand durch Vorgabe der 1. Ziffern aus vorherigen Rechenläufen
Dim a, b, Zeile As Long, i As Integer
Const PotenzMax = 14
Zeile = 1
Do
If (a "1") _
Or (a > 20000 And Left(CStr(a), 4) "1052") _
Or (a > 2000000000 And Left(CStr(a), 8) "10526315") Then
i = i + 1
If i > PotenzMax Then
MsgBox "Fertig" _
& vbLf & "a: " & a & vbLf & "b: " & b, _
vbInformation + vbOKOnly, "Suche die 2"
Exit Do
End If
If a > 2000000000 Then
a = CDec(1.0526315 * 10 ^ i)
ElseIf a > 20000 Then
a = CDec(1.0521 * 10 ^ i)
Else
a = CDec(10 ^ i)
End If
a = Round(a + 2, 0)
Else
a = Round(a + 10, 0)
End If
b = CDec(Right(CStr(a), 1) & Left(CStr(a), Len(CStr(a)) - 1))
If Abs(b - 2 * a) "1" Then
i = i + 1
If i > PotenzMax Then Exit Do
a = CDec(10 ^ i)
a = Round(a + 2, 0)
Else
a = Round(a + 10, 0)
End If
b = CDec(Right(CStr(a), 1) & Left(CStr(a), Len(CStr(a)) - 1))
If Abs(b - 2 * a)