@float.exponent         = $7F800000
@float.firstNaN         = $7F800001
@float.halfsign         = $40000000
@float.mantisa          = $007FFFFF ; fixed, thanks revolution
@double.exponent        = $7FF0000000000000
@double.firstNaN        = $7FF0000000000001
@double.halfsign        = $4000000000000000
@double.mantisa         = $000FFFFFFFFFFFFF
@ext.exponent           = $7FFF
@ext.halfsign           = $4000
@ext.infinity           = $8000000000000000
@ext.firstNaN           = $8000000000000001
@ext.mantisa            = $7FFFFFFFFFFFFFFF
struc dd [arg] {
  if defined arg
        . dd arg
  else
    match sign value,arg {
      match =INF,value           { . dd @float.exponent - (sign @float.halfsign - @float.halfsign) \\}
      match =NaN,value           { . dd @float.firstNaN - (sign @float.halfsign - @float.halfsign) \\}
      match =NaN + variant,value { . dd @float.firstNaN - (sign @float.halfsign - @float.halfsign) + ((variant+1) and @float.mantisa) - 1 and (((variant+1) and @float.mantisa)/(((variant) and @float.mantisa)+1)) \\} \}
  end if }
macro dd [arg] {
  if defined arg
        dd arg
  else
    match sign value,arg {
      match =INF,value           { dd @float.exponent - (sign @float.halfsign - @float.halfsign) \\}
      match =NaN,value           { dd @float.firstNaN - (sign @float.halfsign - @float.halfsign) \\}
      match =NaN + variant,value { dd @float.firstNaN - (sign @float.halfsign - @float.halfsign) + ((variant+1) and @float.mantisa) - 1 and (((variant+1) and @float.mantisa)/(((variant) and @float.mantisa)+1)) \\} \}
  end if }
struc dq [arg] {
  if defined arg
        . dq arg
  else
    match sign value,arg {
      match =INF,value           { . dq @double.exponent - (sign @double.halfsign - @double.halfsign) \\}
      match =NaN,value           { . dq @double.firstNaN - (sign @double.halfsign - @double.halfsign) \\}
      match =NaN + variant,value { . dq @double.firstNaN - (sign @double.halfsign - @double.halfsign) + ((variant+1) and @double.mantisa) - 1 and (((variant+1) and @double.mantisa)/(((variant) and @double.mantisa)+1)) \\} \}
  end if }
macro dq [arg] {
  if defined arg
        dq arg
  else
    match sign value,arg {
      match =INF,value           { dq @double.exponent - (sign @double.halfsign - @double.halfsign) \\}
      match =NaN,value           { dq @double.firstNaN - (sign @double.halfsign - @double.halfsign) \\}
      match =NaN + variant,value { dq @double.firstNaN - (sign @double.halfsign - @double.halfsign) + ((variant+1) and @double.mantisa) - 1 and (((variant+1) and @double.mantisa)/(((variant) and @double.mantisa)+1)) \\} \}
  end if }
struc dt [arg] {
  if 1.0 eqtype arg
        . dt arg
  else
    match sign value,arg {
      label . tbyte
      match =INF,value { dq @ext.infinity \\}
      match =NaN,value { dq @ext.firstNaN \\}
      match =NaN + variant,value { dq @ext.firstNaN + ((variant+1) and @ext.mantisa) - 1 and (((variant+1) and @ext.mantisa)/(((variant) and @ext.mantisa)+1)) \\}
      dw @ext.exponent - (sign @ext.halfsign - @ext.halfsign) \}
  end if }
macro dt [arg] {
  if 1.0 eqtype arg
        dt arg
  else
    match sign value,arg {
      match =INF,value { dq @ext.infinity \\}
      match =NaN,value { dq @ext.firstNaN \\}
      match =NaN + variant,value { dq @ext.firstNaN + ((variant+1) and @ext.mantisa) - 1 and (((variant+1) and @ext.mantisa)/(((variant) and @ext.mantisa)+1)) \\}
      dw @ext.exponent - (sign @ext.halfsign - @ext.halfsign) \}
  end if }    
this aproach has only 1 significant minus - when these data directives get something realy undefined they don`t signal error.
use case:    
dd 1, 7.6, +INF, -INF, +NaN, -NaN,+NaN+-1,-NaN+1000000+7/2 shl 4
dq 1, 7.6, +INF, -INF, +NaN, -NaN,+NaN+-1,-NaN+1000000+7/2 shl 4
dt 7.6, +INF, -INF, +NaN, -NaN,+NaN+-1,-NaN+1000000+7/2 shl 4