|
|
You asked this question a few minutes ago in Q&A. Do *NOT* cross-post.
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
Hello Simon sorry about that this is my first post in this forum ...was just trying to get to know how and where to post...thanks
|
|
|
|
|
That's why we have guidelines everywhere (here[^] for example) which explain the rules; please read them.
It's time for a new signature.
|
|
|
|
|
Hi guys i have a new kind of error , i never seen before . Error Message is - Cannot update Program database "e:\ganesh_projects\Framework\Framework\debug\vc90.pdp . I am a fresher so any one tell what the problem is ?
|
|
|
|
|
Clean / rebuild, and you will most likely be fine.
|
|
|
|
|
As you know, if the call to LoadLibrary specifies a DLL module already mapped into the address space of the calling process, the function simply returns a handle of the DLL and increments the module's reference count.
Somewhere, I need to get the reference count od a dll. How to get the dll's reference count? Thanks.
|
|
|
|
|
|
|
well, did you try it? what was the outcome?
|
|
|
|
|
I am trying to convert float to text.
the reason i am doing this is because the float contains 0.09999987 and i want that variable as 0.10 and then compare it to other float which is initially 0.10000
if anyone have idea how to convert float to text let me know
thx,
cheers from Canada.
|
|
|
|
|
|
You should not be trying to do this; float/double values are inherently imprecise so two variables which nominally contain the same value will not necessarily be exactly the same. This is due to the binary representation of floating point numbers. There are many papers on the internet including this one[^] that deal with it.
It's time for a new signature.
|
|
|
|
|
You need to compare the difference to some epsilon. Check float.h for DBL_EPSILON or FLT_EPSILON .
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
thx all for your support..
nvm it i solved it ..stupid ME ...
just added this method:
bool classname::isStringEquals(float fNewNumber,float fOldNumber)
{
CString value1;
CString value2;
value1.Format( _T("%.4f"), fNewNumber);
value2.Format( _T("%.4f"), fOldNumber);
if(value1==value2)
return true;
else
return false;
cheers from canada
|
|
|
|
|
|
How am i killing performance, well all i wanted to check is if the other float value is close or 0.10 and that code does check that i cannot use greater or less than since both float can be changed might be >0 or <0 , so rounding off values check if it's close to 0.10 or not because i do not have problem in my math if value if 0.0999978 or 0.10 both will give me same answer since it just checks value and then do not use them for any calculation, i will paste my code later on here and then you can have a look at it and you might be able to give me better suggestion,
thx for reply tho
cheers from canada.
|
|
|
|
|
Performance is killed because CString will new and delete memory to hold the chars for both instances.
If this is in a highly used piece of code, you could fragment the heck out of your heap.
The Epsilon isEqualish(float, float, float) approach is the best.
An alternative would be to use a Fixed Point numeric class that would exactly represent a decimal value, but that might also have performance implications. It all depends on what you are doing.
Skip the CString.Format even though it seems convenient.
|
|
|
|
|
You're kinda doing it wrong - at least in general. You code may work fine for your requirements!
Try:
BOOL IsEqualish (double d1, double d2, double dEpsilon)
{
ASSERT(dEpsilon > 0.0);
d1 -= d2;
if (d1 < 0.0)
d1 = -d1;
return (d1 <= dEpsilon)
}
or for consise:
BOOL IsEqualish (double d1, double d2, double dEpsilon) { return abs (d1 - d2) <= dEpsilon; }
Where dEpsilon is the error margin. For 4 dps, dEpsilon = 0.0001, and so on.
Iain.
I am one of "those foreigners coming over here and stealing our jobs". Yay me!
|
|
|
|
|
I didn't get your code why would i use epsilon ? and it has to be FLOAT
thx for reply.
cheers from canada
|
|
|
|
|
mohit`12 wrote: I didn't get your code why would i use epsilon ?
You yourself brought up the problem of floating point numbers being not perfect - if you read some of the links given you, you will realise that testing for equality is basically a waste of time. Digital computers simply do not do perfect representations of non-integers. Unless you're very lucky, and it's 1/(2^n). Two numbers can be reeeeeeeally close, and not equal. The simple fact you asked your original question shows that you know this already.
mohit`12 wrote: and it has to be FLOAT
So change double to float . Or whatever FLOA Ts your boat. Not the hardest of challenges!
Iain.
ps, My code will also cope (as it should) with negative floating values.
I am one of "those foreigners coming over here and stealing our jobs". Yay me!
|
|
|
|
|
I think you want
fabs
for C/C++.
|
|
|
|
|
viaducting wrote: I think you want fabs
You'd be right, too! That's what happens when you code in a text editor...
Not to worry - the OP is convinced all I typed was rubbish anyway!
But good to point out an error, in case it helps someone else.
Iain.
I am one of "those foreigners coming over here and stealing our jobs". Yay me!
|
|
|
|
|
I'm not a great one for going mental about code's performance but that's just horrible on so many levels. Why not do something like:
bool near_enough_equals( double a, double b )
{
return (b - a) < ( (b + a) / 2000.0 );
}
Cheers,
Ash
|
|
|
|
|
I am dealing with float and there is not way i can use DOUBLE for that particular code and my value might be negative so it might return negative value using your code and also b will be always less than a so negative
thx for reply
cheers from canada
|
|
|
|