<<>>open webamp
 
justin = {main feed = { recent comments, search } , music , code , askjf , pubkey };
 
Music
July 22, 2011
freeform jam with louie
Fun with denormals
July 14, 2011
Something that often comes up when writing audio applications are things called "denormals". These are floating point numbers that are very small, so small in fact that for some reason CPU designers think they are quite rare (OK so they are), so the circuitry that processes them is very slow, when compared to that of a "normal" sized number.

If you read that (awful) explanation, and didn't understand it or care, I apologize, you can stop reading now because it will only get more boring and less intelligible.

We have made some common code to filter out these numbers, as many others no doubt have done:
// boring code omitted, see WDL/denormal.h for the full code
// WDL_DENORMAL_DOUBLE_HW() is a macro which safely gets you the high 32 bits of a double as an unsigned int.

static double WDL_DENORMAL_INLINE denormal_filter_double(double a)
{
  return (WDL_DENORMAL_DOUBLE_HW(&a)&0x7ff00000) ? a : 0.0;
}
The above code pretty simply looks at the exponent field of the double, and if it is nonzero, returns the double, otherwise it returns 0.

Recently it came to our attention that we actually needed to filter out larger numbers as well (when sending those numbers through a process such as a FFT, they would end up as denormals). If we pick a number around 10^-16 (not being picky about the exact cutoff), which has an exponent of 0x3C9, we can choose to filter when the expoenent field is under that value:
static double WDL_DENORMAL_INLINE denormal_filter_double_aggressive(double a)
{
  return ((WDL_DENORMAL_DOUBLE_HW(&a))&0x7ff00000) >= 0x3c900000 ? a : 0.0;
}
That was pretty much free (ok slightly larger code, I suppose). One nice thing that became apparent was that we could filter NaN and infinity values this way as well (exponent == 0x7FF), with only the cost of a single integer addition:
static double WDL_DENORMAL_INLINE denormal_filter_double_aggressive(double a)
{
  return ((WDL_DENORMAL_DOUBLE_HW(&a)+0x100000)&0x7ff00000) >= 0x3cA00000 ? a : 0.0;
}
Note that the exponent is increased by 1, so that 0x7FF becomes 0, and we adjusted the cutoff constant for the change.

An extra thought: if you need to pick the cutoff number more precisely, you could change the mask to 0x7fffffff and the cutoff (0x3cA00000) to include some of the fraction digits...

Additional reading: IEEE_754-1985.

Oh and happy bastille day!

3 Comments
$50 of fun
July 9, 2011

A small r/c car, led lights, and wireless camera.

Comment...

Music
July 1, 2011
louie - 1 -- [9:35]
louie - 2 -- [3:35]
louie - 3 -- [7:40]
louie - 4 -- [10:27]
louie - 5 -- [14:21]
louie - 6 -- [5:36]
louie - 7 -- [4:50]
louie - 8 -- [2:37]
louie - 9 -- [12:23]
Music
June 29, 2011
louie - 1 -- [3:02]
louie - 2 -- [4:00]
louie - 3 -- [5:22]
louie - 4 -- [3:18]
louie - 5 -- [5:12]
louie - 6 -- [6:28]
louie - 7 -- [7:28]
louie - 8 -- [3:30]
louie - 9 -- [2:47]
louie - 10 -- [3:55]
louie - 11 -- [4:44]
louie - 12 -- [4:15]
louie - 13 -- [3:08]
louie - 14 -- [2:59]
Spotted last month
June 27, 2011

Al thought this would make a good picture.

3 Comments

I have this dream
June 16, 2011

where I'm flying through space
hoping there are no power lines

2 Comments

s/incredible/sleepy/
Yawn:



Comment...

Music
June 5, 2011
bren - 1 -- [12:46]
bren - 2 -- [13:05]
Lots of people
May 18, 2011

I am not at a Pink Floyd concert.

Comment...

Reading this piece from the New Yorker about the Mississippi River from 1987 (at schwa's recommendation). I wish it had pictures, but wow.

Comment...



Comment...

...are now so distant...

Comment...

Another test
May 10, 2011

I like analog clocks.

1 Comment

Columbus Park
May 10, 2011



Comment...



4 Comments
Music
April 22, 2011
louie - 1 -- [6:28]
louie - 2 -- [7:01]
louie - 3 -- [10:30]
louie - 4 -- [4:55]
louie - 5 -- [4:13]
louie - 6 -- [6:58]
tame impala
April 19, 2011
I love these guys, I can't wait until next week for their show. Anyway some of their (old?) demos/unreleased tracks have shown up on youtube, and are really wonderful. Such low quality and such good result. Here's a little playlist of some of them I put together:


Also, I would highly recommend their album "Innerspeaker", as well as the EP that has the song "half full glass of wine" on it. Both of those are outstanding.

Recordings:

freeform jam with louie

4 Comments
power consumption
April 12, 2011
I wonder what the total number of kW hours required to say, run the Apollo 11 mission. One factor would be in the fuel required, but I also mean in running the whole operation, manufacturering components, running control rooms, processing fuel, moving the rockets around, etc etc.

Which brings me to the fact that I just got a "Kill-A-Watt", after reading this blog post. I haven't tested everything yet (nor will I ever hah), but here are the results for the things I have: The biggest thing that struck me is that my laptop, under normal use conditions, is using less power than desktop's monitor ALONE. Wow. I'll test more things soon, I get to reboot once again to remove the Kill-A-Watt from my desktop now.

*I should also mention that this laptop is really wonderful, despite lacking home/end/pgup/pgdown keys, which makes me sad. It weighs only 3LBs, and is fast (i7 dual core, 4 threads, goes up to 3.2ghz or so in singlecore mode automatically), and even has an optical drive built in.

1 Comment
Music
April 11, 2011
freeform jam with louie
a little ditty
April 9, 2011
Here's a sparse musical improv I made with a friend.

Comment...
search : rss : recent comments : Copyright © 2025 Justin Frankel