// fmt_fb32 formats a float32 in the form -123p3 (exponent is power of 2).
func (f *fmt) fmt_fb32(v float32) { f.padString(strconv.Ftoa32(v, 'b', 0)) }
+// fmt_c64 formats a complex64 according to its fmt_x argument.
+// TODO pass in a method rather than a byte when the compilers mature.
+func (f *fmt) fmt_c64(v complex64, fmt_x byte) {
+ f.buf.WriteByte('(')
+ r := real(v)
+ for i := 0; ; i++ {
+ switch fmt_x {
+ case 'e':
+ f.fmt_e32(r)
+ case 'E':
+ f.fmt_E32(r)
+ case 'f':
+ f.fmt_f32(r)
+ case 'g':
+ f.fmt_g32(r)
+ case 'G':
+ f.fmt_G32(r)
+ }
+ if i != 0 {
+ break
+ }
+ f.plus = true
+ r = imag(v)
+ }
+ f.buf.Write(irparenBytes)
+}
+
+// fmt_c128 formats a complex128 according to its fmt_x argument.
+// TODO pass in a method rather than a byte when the compilers mature.
+func (f *fmt) fmt_c128(v complex128, fmt_x byte) {
+ f.buf.WriteByte('(')
+ r := real(v)
+ for i := 0; ; i++ {
+ switch fmt_x {
+ case 'e':
+ f.fmt_e64(r)
+ case 'E':
+ f.fmt_E64(r)
+ case 'f':
+ f.fmt_f64(r)
+ case 'g':
+ f.fmt_g64(r)
+ case 'G':
+ f.fmt_G64(r)
+ }
+ if i != 0 {
+ break
+ }
+ f.plus = true
+ r = imag(v)
+ }
+ f.buf.Write(irparenBytes)
+}
+
// float
func (x *fmt) f(a float) {
if strconv.FloatSize == 32 {
%o base 8
%x base 16, with lower-case letters for a-f
%X base 16, with upper-case letters for A-F
- Floating-point:
+ Floating-point and complex constituents:
%e scientific notation, e.g. -1234.456e+78
%E scientific notation, e.g. -1234.456E+78
%f decimal point but no exponent, e.g. 123.456
p.fmt.fmt_g64(float64(f))
}
return false
- // case complex64:
- // p.fmt.fmt_c64(f)
- // return false
- // case complex128:
- // p.fmt.fmt_c128(f)
- // return false
- // case complex:
- // if complexBits == 128 {
- // p.fmt.fmt_c128(complex128(f))
- // } else {
- // p.fmt.fmt_c64(complex64(f))
- // }
- // return false
+ case complex64:
+ p.fmt.fmt_c64(f, 'g')
+ return false
+ case complex128:
+ p.fmt.fmt_c128(f, 'g')
+ return false
+ case complex:
+ if complexBits == 64 {
+ p.fmt.fmt_c64(complex64(f), 'g')
+ } else {
+ p.fmt.fmt_c128(complex128(f), 'g')
+ }
+ return false
case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr:
v, signed, ok := getInt(field)
if !ok {
goto badtype
}
- // float
+ // float/complex
case 'e':
if v, ok := getFloat32(field); ok {
p.fmt.fmt_e32(v)
} else if v, ok := getFloat64(field); ok {
p.fmt.fmt_e64(v)
} else if v, ok := getComplex64(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_e32(real(v))
- p.fmt.plus = true
- p.fmt.fmt_e32(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c64(v, 'e')
} else if v, ok := getComplex128(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_e64(real(v))
- p.fmt.plus = true
- p.fmt.fmt_e64(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c128(v, 'e')
+
} else {
goto badtype
}
} else if v, ok := getFloat64(field); ok {
p.fmt.fmt_E64(v)
} else if v, ok := getComplex64(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_E32(real(v))
- p.fmt.plus = true
- p.fmt.fmt_E32(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c64(v, 'E')
} else if v, ok := getComplex128(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_E64(real(v))
- p.fmt.plus = true
- p.fmt.fmt_E64(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c128(v, 'E')
} else {
goto badtype
}
} else if v, ok := getFloat64(field); ok {
p.fmt.fmt_f64(v)
} else if v, ok := getComplex64(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_f32(real(v))
- p.fmt.plus = true
- p.fmt.fmt_f32(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c64(v, 'f')
} else if v, ok := getComplex128(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_f64(real(v))
- p.fmt.plus = true
- p.fmt.fmt_f64(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c128(v, 'f')
} else {
goto badtype
}
} else if v, ok := getFloat64(field); ok {
p.fmt.fmt_g64(v)
} else if v, ok := getComplex64(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_g32(real(v))
- p.fmt.plus = true
- p.fmt.fmt_g32(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c64(v, 'g')
} else if v, ok := getComplex128(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_g64(real(v))
- p.fmt.plus = true
- p.fmt.fmt_g64(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c128(v, 'g')
} else {
goto badtype
}
} else if v, ok := getFloat64(field); ok {
p.fmt.fmt_G64(v)
} else if v, ok := getComplex64(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_G32(real(v))
- p.fmt.plus = true
- p.fmt.fmt_G32(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c64(v, 'G')
} else if v, ok := getComplex128(field); ok {
- p.buf.WriteByte('(')
- p.fmt.fmt_G64(real(v))
- p.fmt.plus = true
- p.fmt.fmt_G64(imag(v))
- p.buf.Write(irparenBytes)
+ p.fmt.fmt_c128(v, 'G')
} else {
goto badtype
}