|
Happy to help; don't forget to mark my answer as accepted.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
What does that mean, and what is the difference between just merge sort? Here is the code I use for just merge sort. How to make it BALANCED.
void Merge(int arr[], int low, int high, int mid)
{
int i, j, k, c[50];
i = low;
j = mid + 1;
k = low;
while((i <= mid) && (j <= high))
{
if(arr[i] < arr[j])
{
c[k] = arr[i];
k++;
i++;
}
else
{
c[k] = arr[j];
k++;
j++;
}
}
while(i <= mid)
{
c[k] = arr[i];
k++;
i++;
}
while(j <= high)
{
c[k] = arr[j];
k++;
j++;
}
for(i = low; i < k; i++)
{
arr[i] = c[i];
}
UpdateData(arr, high + 1);
}
void MergeSort(int arr[], int low, int high)
{
int mid;
if(low < high)
{
mid = (low + high) / 2;
MergeSort(arr, low, mid);
MergeSort(arr, mid + 1, high);
Merge(arr, low, high, mid);
SwapsCount++;
}
}
<pre lang="c++">
|
|
|
|
|
I thought I had this right, but I'm off by around 5%. I'm not really familar with using c++ to do math.
ulProgressMax = 0x2d76c718,
it should be around 762761216
dTotal = ((float)ulProgressMax / (1024*1024) );
and I get 727423606
|
|
|
|
|
I get 727.42360687255859375 when I perform 0x2D76C718 divided by (1024 * 1024)
What's the problem?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
I should of phrased my question better, my bad
I learned from experience that a customer will call me and say that's not the size of the file, and start asking all kinds of questions, so I want to get it right
The raw value before I do any math or convert it down to .2 is 762758936.00000000
I was just trying to get 762.75, but I didn't convert it correctly and got 727 something.
|
|
|
|
|
jkirkerx wrote: I learned from experience that a customer will call me and say that's not the size of the file, and start asking all kinds of questions, so I want to get it right
Keep in mind that a megabyte is 10242 bytes, not 10002. You also have to take into consideration the actual size of the file vs. the number of bytes that it consumes on disk. If your customer is looking at one and you are reporting the other, ...
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
modified 21-Nov-11 16:58pm.
|
|
|
|
|
So my calculation is correct, but I just fell into the customer category, thus asking all kinds of questions.
Could you point me someplace where I can take the lesson?
I would like to show the customer the 767 value, and keep the other value to myself. It's just for decorative purposes.
|
|
|
|
|
That was a brain twister, required a Jeopardy question
(1000*1000) because it was already bytes, and I was just rounding it down.
Thanks Dave
|
|
|
|
|
0x2d76c718 is exactly 762758936 and dTotal = 727.423606 , I see no contraddiction, here.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I think when I got the value out of debug, I copied the value after conversion. My bad.
I don't have the experience or knowledge to read the long value yet.
|
|
|
|
|
You have asked the eternal question that will plague normal people and engineers until the end of time.
How Big Is 1K?
Normal people will say 1K = 1000, engineers will say 1K = 1024.
However, what if I told you the units were dollars? Why is it that nobody is confused if I say $1K?
Computer people use 1K = 1024, 1M = 1024*1024, 1G = 1024*1024*1024, etc. This is because they are used to using computer terminology where everything is a power of 2.
Everybody else, including Hard Disk manufacturers use the standard metric system definition of 1K = 1000, 1M = 1000*1000, and 1G = 1000*1000*1000.
So, if you ask Microsoft how big the file is, they will answer you using 1024 as the base, they are computer people. Also, hard drives are formatted into sectors that, regardless of the actual sector size, will contain 512 bytes of user data. So disk drive allocations will be expressed in powers of 2 simply because of this.
Finally, Performance Engineers will describe performance of computer systems using terms such as Megabytes per Second (MB/Sec) and that will be in base 10, 1000*1000 because, as a rate, you are talking about how much data is being moved, not the "chunk size" of the movement.
I am a computer software engineer doing performance work on disk drives. You can see I flip between numbering systems all the time. Keeps me on my toes.
And, by the way, this propensity of computer systems to use 1 Kilobyte to be 1024 has caught the attention of the international standards organizations that deal with Metric systems. As you'd expect, they are annoyed by computer people ursurping one of their definitons that has been around for a hundred years or so. So they have come up with new definitions for the stuff that's based on powers of 2, Kibibyte a "binary kilobyte".
http://en.wikipedia.org/wiki/Kibibyte[^]
So the eternal struggle continues
|
|
|
|
|
Oh, I had no idea that there was a holly war between 1024 and 1000 being fought today. I would of never know if it wasn't for the c++ programming I dove into.
I finally figured out Dave's statement, and realized that the value I already had was the Microsoft format, and I just had to do 1000*1000, so thats where the 5% loss came from, the extra 24.
That was an excellent and en-lighting explanation, and deserves a 5. Now when my friends try to talk about the subject, I can think of your explanation. Oh, maybe that's why disk drives format less than the size printed on the label.
Thanks
|
|
|
|
|
As you used 1024*124=1048576 instead of 1 million, the difference is actually 4.8576%, to be precise
|
|
|
|
|
It adds up with larger file sizes
|
|
|
|
|
How can I get the size of a scroll bar? In case, Width from vertical scroll, and Height from Horizontal scroll bar. They're windows DEFINES?
Omar - VC++ Programmer
|
|
|
|
|
Hi,
Have a look at the GetSystemMetrics function[^]. You probably need the SM_CXVSCROLL and SM_CYHSCROLL indexes.
Best Wishes,
-David Delaune
|
|
|
|
|
Thanks, its works
Omar - VC++ Programmer
|
|
|
|
|
Hi all,
I am getting some "Access violation writing " for memset for every 30 min after i run my application.
And the cursor goes to the below line:
memset(pSharedBuffer2, 0, sizeof(*pSharedBuffer2));
Here is the function i am using i am trying,and this function i am calling in timer:
#define BUF_SIZE 2048
const int max_msg = 2048;
char *pSharedBuffer2 = (char*)malloc(max_msg);
int WriteToShared()
{
HANDLE handleMappedFile;
LPVOID lpMsgBuf;
handleMappedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, HIWORD(BUF_SIZE), LOWORD(BUF_SIZE), szName4);
if (handleMappedFile == NULL)
{
printf("Could not create file mapping object.\n");
LocalFree( lpMsgBuf );
}
memset(pSharedBuffer2, 0, sizeof(*pSharedBuffer2));
pSharedBuffer2 = (char*)MapViewOfFile(handleMappedFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pSharedBuffer2 == NULL)
{
printf("Could not map view of file.\n");
CloseHandle(handleMappedFile);
}
sprintf(i,"%d",Test);
addMsg1(i, pSharedBuffer2);
return 0;
OnTimer()
{
WriteToShared()
}
}
Can anyone guide,whats exactly going wrong.
Thanks
Sharan
|
|
|
|
|
may be give
memset(pSharedBuffer2, 0, max_msg );
|
|
|
|
|
manju 3 wrote: memset(pSharedBuffer2, 0, sizeof(*pSharedBuffer2));
That is probably NOT what you intended to do, because it sets just 1 byte (sizeof(char) is ONE). Did you mean
memset(pSharedBuffer2, 0, max_msg);
?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi,
Thanks for your reply.Even i tried with
memset(pSharedBuffer2, 0, max_msg);
but getting the same "access violation for writing"
Thanks
Sharan
|
|
|
|
|
What is i (i.e. how is it declared/defined?)?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: What is i
"i" is a flag may be 0 or 1.
i am making it 0 initially,and later making it 1 and writing to shared memory
|
|
|
|
|
Then
sprintf(i,"%d",Test);
is evil (sprintf assumes i is an array of characters).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
and what is addMsg1() and what does it do? It is blowing up in there?
Also, you have a macro that defines to 2048 and max_msg that is set to 2048 and then use both in the code, interchangably. Pick one and use it exclusively otherwise you'll get bit one of these days.
|
|
|
|
|