|
The multiplication by 250 suggestion is the easiest, but the human ear response isn't linear; it's logarithmic. A range of 0 to 40 dB corresponds to a range of 0 to 10,000 mW power level exactly, so I suggest that a conversion implementing the equation:
DirectX.AudioVideoPlayback.Volume = 10^(MySlider.Volume/10)
might be more useful.
"A Journey of a Thousand Rest Stops Begins with a Single Movement"
|
|
|
|
|
I totally forgot that it was Audio... you are totally right, the conversion must consider the change between dB and electrical units. I would give you a 5 if I was not in the firm. (I'll do it when I'm home)
Regards.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
Rating helpfull answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
Since the allowed range for the volume (according to OP) is -10,000 to 0 , maybe the effect is already accounted by the DirectX function.
I.e. maybe the function accepts sound level instead of volume.
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]
|
|
|
|
|
The Threading.Interlocked.CompareExchange operation is wonderful, from both a theoretical and practical perspective. It allows for lock-free implementations of many algorithms. For example, to add something to a stack:
Sub AddToStack(X as Whatever)
Dim OldStack as Whatever
Do
OldStack = TheStack.Next
X.Next = OldStack
Loop While Threading.Interlocked.CompareExchange(TheStack.Next, X, OldStack) <> OldStack
End Sub Nice and simple and elegant. If no other thread messes with the stack during the execution of the above code, it runs once. If another thread messes with the stack, it may have to run again, but if will never have to wait for another thread to do something. It may have to wait for another thread to not do something, but since the only obstructive actions will be those that achieve useful progress, there is no danger of livelock.
A couple of wrinkles in the CompareExchange ointment, though:- Some data structures require more than one instruction to 'commit' changes; implementations of such data structures will be more complicated.
- Many algorithms require that if the object being 'CompareExchange'd is changed, the CompareExchange detect it. If new objects are created and used every time something changes, the CompareExchange will detect it and there will be no problem. If objects are reused from a pool, however, it's possible that an object someone was expecting to CompareExchange will be disposed of (returned to the pool), reallocated, and put in the place of the old object that was being 'CompareExchange'd.
What is the best way to take advantage of CompareExchange while avoiding dangers like object reuse? Physically, I would think that since the Intel processors allow a CompareExchange of a 64-bit long, they should be able support a CompareExchange of a data item that consists of an object plus a 32-bit 'reuse' count; even on 64-bit platforms, a 64-bit data type should be able to hold an object plus a 'reuse' count (I can't imagine any need for more than 2^32 objects to be handled by one thread in the foreseeable future). Unfortunately, .Net doesn't support any such constructs and I know of no way they could be simulated without boxing and unboxing (which would defeat the whole purpose).
How would one best implement something like the following:
Class AtomicPair
Public Class Pair
Public Thing1,Thing2 as Whatever
End Class
Public MyPair as Pair
Public Sub SetPair(ByVal NewThing1 as Whatever, NewThing2 as Whatever)
Dim NewPair as New AtomicPair.Pair
NewPair.Thing1 = NewThing1
NewPair.Thing2 = NewThing2
MyPair = NewPair
End Sub
Public Sub SetThing1(ByVal NewThing1)
Dim NewPair as New AtomicPair.Pair
Dim OldPair as AtomicPair.Pair
NewPair.Thing1 = NewThing1
Do
OldPair = MyPair
NewPair.Thing2 = OldPair.Thing2
While Threading.Interlocked.CompareExchange(MyPair, NewPair, OldPair) <> OldPair
End Sub
End Class Assume a similar method for SetThing2. As implemeted using 'New', the above will work reliably to allow atomic updates of one or both fields of the pair. If objects were allocated from a pool instead of using New, however, the code could break. What are the best approaches to dealing with the issue?
|
|
|
|
|
Hi, would like to ask u a Java question.
Example i have a array of Books called bookArray
Inside the bookArray i store the following :
bookArray[0] = { 1001, "JAVA Book 1", 1 }
bookArray[1] = { 1001, "JAVA Book 1", 2 }
bookArray[2] = { 1001, "JAVA Book 1", 3 }
bookArray[3] = { 1001, "JAVA Book 1", 4 }
bookArray[4] = { 1002, "C# Book 1", 1 }
bookArray[5] = { 1003, "F# Book 1", 1 }
How do i traverse the array to read from bottom up? meaning when i traverse the array, the first result i get is
bookArray[5] = { 1003, "F# Book 1", 1 }
|
|
|
|
|
Use a "for" loop, with the index variable going from 5 down to 0. To get the ith result, use bookArray[i].
|
|
|
|
|
Like Alan said, you can reverse the order of the index, going from the upper limit down to zero.
for(int i=UpperLimit;i>=LowerLimit;i--)
UpperLimit in your case would be 5, and LowerLimit would be 0. Note, that you use i-- to decrement the index, rather than using i++ to increment the index in each pass.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
Also known as the reverse for-loop pattern.
|
|
|
|
|
Yep.
Who needs a stinkin' "Program {insert language here} In 21 Days" book, when you have CP
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
I would like to understand how random number generators used in various compilers/websites vary. I would like to do some random number tests on my home PC using Visual C++ 6.0 to simulate results that other web based random number generators might produce or that other compilers might produce. For example, suppose I go to a poker website which generates "random" card sequences. I would like to use that same random number generator scheme to run simulations on my PC - how would I go about matching random number generators to do this. I'm guessing there can't be that many different random number generators in use
Thanks!
|
|
|
|
|
Most use time and try to obfuscate it beyond recognition with formulas...no idea if there's a "standard" formula for it though. Use "include ctime" and use srand(time()) . (Just search for random number generator in google and you can probably find source code for one...)
If you're trying to figure out how to cheat at poker games you'll have to figure out what formula they're using .
modified on Thursday, July 10, 2008 4:11 PM
|
|
|
|
|
There is an infinite number of random number generators.
And I don't mean aleph-null infinite, but much more!
Of course some could be more popular than others, but you figuring out which RNG is behind
a particular game site is, well, rather improbable.
|
|
|
|
|
Its likely that a sensible poker site of any size would be using the cryptographically strong RNG. You've got just about zero hope of predicting that, as (at least the windows one is) its based on an entropy pool setup.
Its possible that the bigger sites use a hardware RNG as well. (Not that I think there's a good reason beyond it being cool)
|
|
|
|
|
Some bedtime reading NIST 800-90[^]
Peter
"Until the invention of the computer, the machine gun was the device that enabled humans to make the most mistakes in the smallest amount of time."
|
|
|
|
|
this might look silly but i ve created a simple "random numbers generator" based on the DateTime class
double time = DateTime.Now.Millisecond;
double randomnumber = time / 1000;
Console.WriteLine("random is :{0}",randomnumber.ToString());
what do u think pretty strong huh ??
|
|
|
|
|
Good enough for some purposes... I suppose.
|
|
|
|
|
|
Then at least eliminate a step:
double time = DateTime.Now.Millisecond / 1000.0 ;
|
|
|
|
|
So I have a project that I've been working on, its a simple form that takes some input, then formats the text on a Word document. I've come close to being able to format the text in a pyramid shape, but it fails when the text is not pre-canned to fit in that shape.
Pre-canned text might contain 4 paragraphs, with each paragraph containing more text than the previous. This has been fairly easy to set using constant values for right & left gutters, margins and so forth.
Non-canned text is unknown, might have 2 paragraphs, might have 8 paragraphs and the first one containing more than the 3rd but less than the 5th. Its completely unknown.
I've searched google and did not find an answer.
Question: Is there a formula that can be used to format an unknown amount of text into a pyramid shape?
Thanks
Just because we can; does not mean we should.
|
|
|
|
|
One approach:
1. Put all the text into an array of words (assuming you don't want to split words to fit the pyramid).
2. Write a function that takes a row number and gives the width of the pyramid at that row. (This will depend on the vertex angle of your pyramid.)
3. For each row, construct a string out of the next words that haven't been used yet that minimizes the difference between the string length and that pyramid row width. (It could go over or under the row width.)
4. Center this string at the pyramid row.
5. Repeat until all the words have been used.
|
|
|
|
|
How to find Inverse of NORMSDIST function
ie NORMSINV
It Returns the inverse of the standard normal cumulative distribution. The distribution has a mean of zero and a standard deviation of one.
Syntax
double NORMSINV(double probability)
Probability is a probability corresponding to the normal distribution.
|
|
|
|
|
|
thanks 4 reply
But I m not getting exact answer when i match my answer from ms excel
|
|
|
|
|
No, that's not what is meant by "inverse". It's the inverse distribution function he's looking for.
I'm the ocean. I'm a giant undertow.
|
|
|
|
|
You should check out http://www.google.com.au/codesearch[^] first when you have a well known function that you want, I had a quick check and there seems to be implementations there.
Peter
"Until the invention of the computer, the machine gun was the device that enabled humans to make the most mistakes in the smallest amount of time."
|
|
|
|