> Could you show the generated assembler for this as well?

I should definitely learn a better method for getting this info, and having unmangled names would be nice, too.

This boost code:

  result_type operator()() {
    for (;;) {
      result_type result = result_type(_rng() - (_rng.min)()) * _factor;
      if (result < result_type(1))
        return result;
    }
  }

Is compiled to this:

__ZN5boost10uniform_01INS_6random6detail19pass_through_engineIRNS1_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEEEdEclEv:
.stabn 68,0,57,LM909-__ZN5boost10uniform_01INS_6random6detail19pass_through_engineIRNS1_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEEEdEclEv
LM909:
pushl %ebp #
movl %esp, %ebp #,
pushl %ebx #
subl $20, %esp #,
L840:
LBB361:
LBB362:
LBB363:
LBB364:
LBB365:
.stabn 68,0,59,LM910-__ZN5boost10uniform_01INS_6random6detail19pass_through_engineIRNS1_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEEEdEclEv
LM910:
movl 8(%ebp), %eax # this, this
movl %eax, (%esp) # this,
call __ZN5boost6random6detail19pass_through_engineIRNS0_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEEclEv #
movl %eax, %ebx #, tmp60
movl 8(%ebp), %eax # this, this
movl %eax, (%esp) # this,
call __ZNK5boost6random6detail19pass_through_engineIRNS0_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEE3minEv #
subl %eax, %ebx # tmp62,
movl %ebx, %eax #, tmp63
pushl %eax # tmp63
fildl (%esp) #
leal 4(%esp), %esp #,
movl 8(%ebp), %eax # this, this
fmull 8(%eax) # <variable>._factor
fstpl -16(%ebp) # result
.stabn 68,0,60,LM911-__ZN5boost10uniform_01INS_6random6detail19pass_through_engineIRNS1_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEEEdEclEv
LM911:
fldl -16(%ebp) # result
fld1
fucompp
fnstsw %ax #
sahf
ja L843 #,
jmp L840 #
L843:
.stabn 68,0,61,LM912-__ZN5boost10uniform_01INS_6random6detail19pass_through_engineIRNS1_19linear_congruentialIlLl48271ELl0ELl2147483647ELl399268537EEEEEdEclEv
LM912:
fldl -16(%ebp) # result
LBE365:
LBE364:
LBE363:
LBE362:
LBE361:
addl $20, %esp #,
popl %ebx #
popl %ebp #
ret

Or better, a minimal example to try?

I wish I had one, because then I might be submitting a bug report instead of asking for help.  When I stripped out everything except the retrieval of random numbers, it worked fine, so obviously I went too far.  I'll see what I can do...

> Which version of GCC are you using (exactly)?

g++ --version reports:
g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)