Ok, ok, here we go, This is done the Russian way:
VERSION 5.00
Begin VB.Form Form1
Caption = "A ^ A = B"
ClientHeight = 5850
ClientLeft = 60
ClientTop = 450
ClientWidth = 8295
LinkTopic = "Form1"
ScaleHeight = 5850
ScaleWidth = 8295
StartUpPosition = 3 'Windows Default
Begin VB.TextBox outp2
Height = 375
Left = 3120
Locked = -1 'True
TabIndex = 3
Top = 4440
Visible = 0 'False
Width = 3255
End
Begin VB.TextBox outp1
Height = 375
Left = 3120
Locked = -1 'True
TabIndex = 2
Top = 3840
Visible = 0 'False
Width = 3255
End
Begin VB.CommandButton solve
Caption = "Solve"
Height = 975
Left = 3120
TabIndex = 1
Top = 2640
Width = 3255
End
Begin VB.TextBox inp
Height = 375
Left = 3120
TabIndex = 0
Top = 1680
Width = 3255
End
Begin VB.Label AAA
Caption = "A:"
BeginProperty Font
Name = "Arial"
Size = 72
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1455
Left = 120
TabIndex = 9
Top = 3360
Visible = 0 'False
Width = 1455
End
Begin VB.Label BBB
Caption = "B:"
BeginProperty Font
Name = "Arial"
Size = 72
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1455
Left = 120
TabIndex = 8
Top = 1080
Width = 1455
End
Begin VB.Label sol2
Caption = "Solution2:"
Height = 255
Left = 2160
TabIndex = 7
Top = 4440
Visible = 0 'False
Width = 855
End
Begin VB.Label sol1
Caption = "Solution1:"
Height = 255
Left = 2160
TabIndex = 6
Top = 3960
Visible = 0 'False
Width = 855
End
Begin VB.Label aprox2
Height = 255
Left = 120
TabIndex = 5
Top = 720
Width = 8055
End
Begin VB.Label aprox1
Height = 255
Left = 120
TabIndex = 4
Top = 240
Width = 8055
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Const e As Double = 2.71828
Dim solution1 As Double
Dim solution2 As Double
Dim totsolutions As Byte
Private Sub solve_Click()
Dim mainin As Double
start:
mainin = Val(inp.Text)
If mainin > 1000000000000# Then
If MsgBox("The value you entered is too big. Press OK to put it back in range.", vbOKCancel, "A ^ A = B") = vbOK Then
inp.Text = 1000000000000#
GoTo start
Else
GoTo getout
End If
End If
If mainin < ((1 / e) ^ (1 / e)) Then
If MsgBox("The value you entered is too small. Press OK to put it back in range.", vbOKCancel, "A ^ A = B") = vbOK Then
inp.Text = ((1 / e) ^ (1 / e))
GoTo start
Else
GoTo getout
End If
End If
calc mainin
aprox1.Caption = ""
aprox2.Caption = ""
AAA.Visible = True
outp1.Visible = True
sol1.Visible = False
sol2.Visible = False
outp2.Visible = False
outp1.Text = solution1
If totsolutions = 1 Then
aprox1.Caption = "Approximation difference: " & Abs(solution1 ^ solution1 - mainin)
Else
aprox1.Caption = "Solution1 aproximation difference: " & Abs(solution1 ^ solution1 - mainin)
aprox2.Caption = "Solution2 aproximation difference: " & Abs(solution2 ^ solution2 - mainin)
sol1.Visible = True
sol2.Visible = True
outp2.Text = solution2
outp2.Visible = True
End If
Exit Sub
getout:
aprox1.Caption = ""
aprox2.Caption = ""
AAA.Visible = False
outp1.Visible = False
sol1.Visible = False
sol2.Visible = False
outp2.Visible = False
End Sub
Sub calc(c As Double)
Dim x As Double 'guess
Dim res As Double 'result
If c > 1 Then
q = 1
x = 0
totsolutions = 1
Else
totsolutions = 2
q = 0.1
x = (1 / e)
End If
Do
Do
x = x + q
res = x ^ x
Loop Until Round(res, 14 - Log( c )/ 2) >= Round(c, 14 - Log( c )/ 2)
x = x - q
q = q / 10
Loop Until Round(res, 14 - Log( c )/ 2) = Round(c, 14 - Log( c )/ 2)
x = x + q * 10
solution1 = Round(x, 15)
If c <= 1 Then
q = 0.1
x = (1 / e)
Do
Do
x = x - q
If x < 0 Then res = -1 Else res = x ^ x
Loop Until (Round(res, 14 - Log( c )/ 2) >= Round(c, 14 - Log( c )/ 2)) Or (x < 0)
x = x + q
q = q / 10
Loop Until Round(res, 14 - Log( c )/ 2) = Round(c, 14 - Log( c )/ 2)
x = x - q * 10
solution2 = Round(x, 15)
End If
End Sub