Eerie problem with compiler... need help | Newbie | | Join Date: May 2007
Posts: 13
| |
So I posted this before, but got no answer. I found a way around it but now my backway is doing the same problem.
Basically, in one of my get methods: -
Property Get H() As Double
-
H = CalcH 'This was implemented as the "Back Way" and it fixed problem, before the code in CalcH was in here
-
End Property
-
-
Private Function CalcH() As Double
-
If pH <= 0# And pT > 0# And pP > 0# Then 'calculate if not set
-
pH = STMPTH(pP, pT)
-
ElseIf pH <= 0# And pT > 0# Then
-
If pType = StreamType.Water Then
-
pH = STMTQH(pT, 0#)
-
Else
-
pH = STMTQH(pT, 1#)
-
End If
-
ElseIf pH <= 0# And pP > 0# Then
-
If pType = StreamType.Water Then
-
pH = STMPQH(pP, 0#)
-
Else
-
pH = STMPQH(pP, 1#)
-
End If
-
End If
-
CalcH = pH
-
End Function
-
When I run the program, I give pH a value of 1488. But when it comes to retrieving that value the compiler goes nuts. If I run the program, I get "Error 6: Overflow". So I use the debugger, I step through the WHOLE program... and it completes its run with no issue.... so I run again... and get the error. I find out it is when I retrieve the H value. So I put a break right there. I run program to the break and then step through the retrieval and find something quite odd. When it gets to the - If pH <= 0# And pT > 0# And pP > 0# Then 'calculate if not set
it actually returns true... but pH has a value of 1488! so I do this again and mouse over the pH to see what it says and it says "pH = 0" thats odd... I hit F8 to step. then mouse over pH, still "pH = 0" I open up the locals window and locate the pH variable. it says "pH = 1488", I mouse over pH again and now it says "pH = 1488" BUT IT JUST PASSED AN IF STATEMENT SAYING IF<=0!!!! please help!
Screenshots (in order): #1 #2 #3 #4 #5 #6 #7 |  | Familiar Sight | | Join Date: Mar 2007 Location: VietNam
Posts: 175
| | | re: Eerie problem with compiler... need help Quote:
Originally Posted by Tophurious So I posted this before, but got no answer. I found a way around it but now my backway is doing the same problem.
Basically, in one of my get methods: -
Property Get H() As Double
-
H = CalcH 'This was implemented as the "Back Way" and it fixed problem, before the code in CalcH was in here
-
End Property
-
-
Private Function CalcH() As Double
-
If pH <= 0# And pT > 0# And pP > 0# Then 'calculate if not set
-
pH = STMPTH(pP, pT)
-
ElseIf pH <= 0# And pT > 0# Then
-
If pType = StreamType.Water Then
-
pH = STMTQH(pT, 0#)
-
Else
-
pH = STMTQH(pT, 1#)
-
End If
-
ElseIf pH <= 0# And pP > 0# Then
-
If pType = StreamType.Water Then
-
pH = STMPQH(pP, 0#)
-
Else
-
pH = STMPQH(pP, 1#)
-
End If
-
End If
-
CalcH = pH
-
End Function
-
When I run the program, I give pH a value of 1488. But when it comes to retrieving that value the compiler goes nuts. If I run the program, I get "Error 6: Overflow". So I use the debugger, I step through the WHOLE program... and it completes its run with no issue.... so I run again... and get the error. I find out it is when I retrieve the H value. So I put a break right there. I run program to the break and then step through the retrieval and find something quite odd. When it gets to the - If pH <= 0# And pT > 0# And pP > 0# Then 'calculate if not set
it actually returns true... but pH has a value of 1488! so I do this again and mouse over the pH to see what it says and it says "pH = 0" thats odd... I hit F8 to step. then mouse over pH, still "pH = 0" I open up the locals window and locate the pH variable. it says "pH = 1488", I mouse over pH again and now it says "pH = 1488" BUT IT JUST PASSED AN IF STATEMENT SAYING IF<=0!!!! please help! i saw that you are programing about Class. I've never seen this type of error before. But i think problem here is caused by Local Varriables and Global Varriables. Can u discribe more about ur Class. ( Member Varriables and Member Function)
| | Moderator | | Join Date: Oct 2006 Location: Australia
Posts: 7,748
| | | re: Eerie problem with compiler... need help
I can't look at the images right now, because my work system blocks them. Will have a look in a few hours when I'm at home. In the meantime...
Are you setting it to 1488 or 1488# ? Perhaps there's an unintended conversion happening somewhere along the line, which is causing a calculation to overflow. VB, along with some other languagesw, has a nasty tendency to convert everything in a calculation to match the smallest data type used anywhere in the calculation. This can really screw you up sometimes.
Like I said, I'll have a look at this in detail in a few hours, and see whether anything comes to mind.
| | Newbie | | Join Date: May 2007
Posts: 13
| | | re: Eerie problem with compiler... need help -
Private pP As Double 'Pressure of the stream
-
Private pT As Double 'Temperature of the stream
-
Private pH As Double 'Enthalpy of the stream
-
Private pW As Double 'Flow of the stream
-
Private pType As StreamType 'Type of stream: Steam, Water, Leak(Enum)
-
Private pName As String 'Name of the stream
-
-
Property Let P(P As Double)
-
pP = P
-
End Property
-
-
Property Let T(T As Double)
-
If pType = Steam And pP <> 0 Then
-
If (T - STMPT(pP)) < 27 Then 'Check for 27 degree superheat per PTC 6
-
pT = 0
-
Else
-
pT = T
-
End If
-
Else
-
pT = T
-
End If
-
End Property
-
-
Property Let H(H As Double)
-
pH = H
-
End Property
-
-
Property Let W(W As Double)
-
pW = W
-
End Property
-
-
Property Get P() As Double
-
P = pP
-
End Property
-
-
Property Get T() As Double
-
If pT = 0 And pH > 0 And pP > 0 Then 'calculate if temp unknown & H known
-
If Not SuperHeat Then
-
pT = STMPHT(pP, pH)
-
End If
-
End If
-
T = pT
-
End Property
-
-
Property Get H() As Double
-
H = CalcH
-
End Property
-
-
Property Get W() As Double
-
W = pW
-
End Property
-
-
Property Get SType() As StreamType
-
SType = pType
-
End Property
-
-
Property Get Name() As String
-
Name = pName
-
End Property
-
-
Property Get S() As Double 'Get Entropy
-
If pT <> 0 And pP <> 0 Then
-
S = STMPTS(pP, pT)
-
ElseIf pT = 0 And pP <> 0 Then
-
S = STMPHS(pP, H)
-
End If
-
End Property
-
-
Property Get x() As Double 'Get X
-
x = STMPHQ(pP, H)
-
End Property
-
-
Property Get Q() As Double 'Get Energy Flow Rate (H*W)
-
Q = H * pW
-
End Property
-
-
Property Get V() As Double 'Get Specific Volume
-
V = STMPTV(P, T)
-
End Property
-
-
Property Get Density() As Double 'Get Specific Density
-
If P = 0 Then
-
Density = 62.087 + 0.022519 * T - 0.00033873 * (T ^ 2) + 0.0000010579 * (T ^ 3)
-
Else
-
Density = 1 / V
-
End If
-
End Property
-
-
Property Get C() As Double 'Get Specific Heat
-
C = 1.0244 - 0.00071715 * pT + 0.0000061796 * (pT ^ 2) - 0.000000016397 * (pT ^ 3)
-
End Property
-
This problem went away. And KEEPS COMING BACK!!! I switched my computers out and it started working again. Now I have the same sort of issue and we tried it on 3 different computers here. same problem. I run the program and get overflow. but I can hold down F8 for 20 minutes and easily fly past the point at which it crashes. I am so tired of it. I want to use C# or C++ but unfortunately my company does not have licenses for it.
|  | Familiar Sight | | Join Date: Mar 2007 Location: VietNam
Posts: 175
| | | re: Eerie problem with compiler... need help Quote:
Originally Posted by Tophurious This problem went away. And KEEPS COMING BACK!!! I switched my computers out and it started working again. Now I have the same sort of issue and we tried it on 3 different computers here. same problem. I run the program and get overflow. but I can hold down F8 for 20 minutes and easily fly past the point at which it crashes. I am so tired of it. I want to use C# or C++ but unfortunately my company does not have licenses for it. i tried copy ur code in to a new project and do it. No problem occured. Maybe, u have other statement that i dont know. But i have small idea. -
Property Let H(H As Double)
-
pH = H
-
End Property
-
Here, u let pH = H. H maybe a local varriable in proprerty Let. If this is, no problem occure. But if VB translate H as Property Get H() As Double that u declare. So, this is wrong. I donot ensure how VB translate this, but u shouldnt use the same name for the varriable as the Property name.
Use the same name for Property Let and Property Get only. -
Property Let H (hValue as Double)
-
pH = hValue
-
End Property
-
Property Get H () As Double
-
H = calH()
-
End Property
-
Try replacing other Varriables which name as similar as Property name and do ur project again. If it still have error, i must say sorry because i cannot help u any more.
| | Moderator | | Join Date: Oct 2006 Location: Australia
Posts: 7,748
| | | re: Eerie problem with compiler... need help
That is some weird stuff you've got going on there.
Sorry, I completely forgot about it. I'll e-mail myself a reminder to have a look when I get home tonight.
In the meantime, one straw you could grasp in desperation is to put DefDBL A-Z at the top of the module(s), to indicate a default data type of Double for everything. Probably won't help, but hey, it probably won't hurt.
| | Moderator | | Join Date: Oct 2006 Location: Australia
Posts: 7,748
| | | re: Eerie problem with compiler... need help
Just a note. As I think on it further, it's not really all that surprising that things can work slightly differently between compiled and interpreted code. After all, if the problem is related to temporary values generated during a calculation, there's no reason why the runtime and IDE code couldn't be using some slightly different code internally to do it.
My guess is that it will probably just end up being necessary to force something to Double format, or split up a calculation (or comparison) to gain finer control over the format conversions. However, I haven't read back through the whole of the thread yet. Will do so tonight.
In the meantime, good luck!
| | Moderator | | Join Date: Oct 2006 Location: Australia
Posts: 7,748
| | | re: Eerie problem with compiler... need help
Well, I've had a look through the images. I'm going to admit complete bafflement. I've never really done much with classes, and I know things can get complicated due to different memory models, different types of creation/sharing/destruction of objects and so on. For all I know, there might be another instance of something which is working with the same data that you are looking at.
|  | Similar Visual Basic 4 / 5 / 6 bytes | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,272 network members.
|