X7ROOT File Manager
Current Path:
/opt/golang/1.22.0/src/math/big
opt
/
golang
/
1.22.0
/
src
/
math
/
big
/
📁
..
📄
accuracy_string.go
(647 B)
📄
alias_test.go
(8.81 KB)
📄
arith.go
(8.28 KB)
📄
arith_386.s
(4.04 KB)
📄
arith_amd64.go
(278 B)
📄
arith_amd64.s
(9.07 KB)
📄
arith_arm.s
(4 KB)
📄
arith_arm64.s
(11.85 KB)
📄
arith_decl.go
(686 B)
📄
arith_decl_pure.go
(1.01 KB)
📄
arith_decl_s390x.go
(503 B)
📄
arith_loong64.s
(749 B)
📄
arith_mips64x.s
(763 B)
📄
arith_mipsx.s
(759 B)
📄
arith_ppc64x.s
(16.4 KB)
📄
arith_riscv64.s
(750 B)
📄
arith_s390x.s
(20.29 KB)
📄
arith_s390x_test.go
(770 B)
📄
arith_test.go
(19.88 KB)
📄
arith_wasm.s
(613 B)
📄
bits_test.go
(5.07 KB)
📄
calibrate_test.go
(4.63 KB)
📄
decimal.go
(6.63 KB)
📄
decimal_test.go
(3.33 KB)
📄
doc.go
(3.8 KB)
📄
example_rat_test.go
(1.68 KB)
📄
example_test.go
(4.05 KB)
📄
float.go
(44.55 KB)
📄
float_test.go
(51.94 KB)
📄
floatconv.go
(8.35 KB)
📄
floatconv_test.go
(24.27 KB)
📄
floatexample_test.go
(3.63 KB)
📄
floatmarsh.go
(3.65 KB)
📄
floatmarsh_test.go
(4.51 KB)
📄
ftoa.go
(13.5 KB)
📄
gcd_test.go
(2.16 KB)
📄
hilbert_test.go
(2.88 KB)
📄
int.go
(33.21 KB)
📄
int_test.go
(58.47 KB)
📄
intconv.go
(6.7 KB)
📄
intconv_test.go
(10.01 KB)
📄
intmarsh.go
(2.19 KB)
📄
intmarsh_test.go
(3.07 KB)
📄
link_test.go
(1.4 KB)
📄
nat.go
(31.81 KB)
📄
nat_test.go
(26.22 KB)
📄
natconv.go
(14.56 KB)
📄
natconv_test.go
(16.85 KB)
📄
natdiv.go
(34.36 KB)
📄
prime.go
(10.39 KB)
📄
prime_test.go
(7.1 KB)
📄
rat.go
(13.48 KB)
📄
rat_test.go
(18.89 KB)
📄
ratconv.go
(12.35 KB)
📄
ratconv_test.go
(19.31 KB)
📄
ratmarsh.go
(2.23 KB)
📄
ratmarsh_test.go
(3.34 KB)
📄
roundingmode_string.go
(819 B)
📄
sqrt.go
(2.79 KB)
📄
sqrt_test.go
(4.81 KB)
Editing: floatmarsh.go
// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // This file implements encoding/decoding of Floats. package big import ( "encoding/binary" "errors" "fmt" ) // Gob codec version. Permits backward-compatible changes to the encoding. const floatGobVersion byte = 1 // GobEncode implements the [encoding/gob.GobEncoder] interface. // The [Float] value and all its attributes (precision, // rounding mode, accuracy) are marshaled. func (x *Float) GobEncode() ([]byte, error) { if x == nil { return nil, nil } // determine max. space (bytes) required for encoding sz := 1 + 1 + 4 // version + mode|acc|form|neg (3+2+2+1bit) + prec n := 0 // number of mantissa words if x.form == finite { // add space for mantissa and exponent n = int((x.prec + (_W - 1)) / _W) // required mantissa length in words for given precision // actual mantissa slice could be shorter (trailing 0's) or longer (unused bits): // - if shorter, only encode the words present // - if longer, cut off unused words when encoding in bytes // (in practice, this should never happen since rounding // takes care of it, but be safe and do it always) if len(x.mant) < n { n = len(x.mant) } // len(x.mant) >= n sz += 4 + n*_S // exp + mant } buf := make([]byte, sz) buf[0] = floatGobVersion b := byte(x.mode&7)<<5 | byte((x.acc+1)&3)<<3 | byte(x.form&3)<<1 if x.neg { b |= 1 } buf[1] = b binary.BigEndian.PutUint32(buf[2:], x.prec) if x.form == finite { binary.BigEndian.PutUint32(buf[6:], uint32(x.exp)) x.mant[len(x.mant)-n:].bytes(buf[10:]) // cut off unused trailing words } return buf, nil } // GobDecode implements the [encoding/gob.GobDecoder] interface. // The result is rounded per the precision and rounding mode of // z unless z's precision is 0, in which case z is set exactly // to the decoded value. func (z *Float) GobDecode(buf []byte) error { if len(buf) == 0 { // Other side sent a nil or default value. *z = Float{} return nil } if len(buf) < 6 { return errors.New("Float.GobDecode: buffer too small") } if buf[0] != floatGobVersion { return fmt.Errorf("Float.GobDecode: encoding version %d not supported", buf[0]) } oldPrec := z.prec oldMode := z.mode b := buf[1] z.mode = RoundingMode((b >> 5) & 7) z.acc = Accuracy((b>>3)&3) - 1 z.form = form((b >> 1) & 3) z.neg = b&1 != 0 z.prec = binary.BigEndian.Uint32(buf[2:]) if z.form == finite { if len(buf) < 10 { return errors.New("Float.GobDecode: buffer too small for finite form float") } z.exp = int32(binary.BigEndian.Uint32(buf[6:])) z.mant = z.mant.setBytes(buf[10:]) } if oldPrec != 0 { z.mode = oldMode z.SetPrec(uint(oldPrec)) } if msg := z.validate0(); msg != "" { return errors.New("Float.GobDecode: " + msg) } return nil } // MarshalText implements the [encoding.TextMarshaler] interface. // Only the [Float] value is marshaled (in full precision), other // attributes such as precision or accuracy are ignored. func (x *Float) MarshalText() (text []byte, err error) { if x == nil { return []byte("<nil>"), nil } var buf []byte return x.Append(buf, 'g', -1), nil } // UnmarshalText implements the [encoding.TextUnmarshaler] interface. // The result is rounded per the precision and rounding mode of z. // If z's precision is 0, it is changed to 64 before rounding takes // effect. func (z *Float) UnmarshalText(text []byte) error { // TODO(gri): get rid of the []byte/string conversion _, _, err := z.Parse(string(text), 0) if err != nil { err = fmt.Errorf("math/big: cannot unmarshal %q into a *big.Float (%v)", text, err) } return err }
Upload File
Create Folder