github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/math/big/rat.go (about) 1 // Copyright 2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // This file implements multi-precision rational numbers. 6 7 package big 8 9 // Ratは、任意の精度の商a/bを表します。 10 // Ratのゼロ値は値0を表します。 11 // 12 // 操作は常にポインタ引数(*Rat)を取る 13 // 代わりにRat値、そして各ユニークなRat値は 14 // 自身のユニークな*Ratポインタが必要です。Rat値を「コピー」するには、 15 // 既存の(または新しく割り当てられた)Ratを 16 // [Rat.Set] メソッドを使用して新しい値に設定する必要があります。Ratsの浅いコピーは 17 // サポートされておらず、エラーを引き起こす可能性があります。 18 type Rat struct { 19 // To make zero values for Rat work w/o initialization, 20 // a zero value of b (len(b) == 0) acts like b == 1. At 21 // the earliest opportunity (when an assignment to the Rat 22 // is made), such uninitialized denominators are set to 1. 23 // a.neg determines the sign of the Rat, b.neg is ignored. 24 a, b Int 25 } 26 27 // NewRatは、分子aと分母bを持つ新しい [Rat] を作成します。 28 func NewRat(a, b int64) *Rat 29 30 // SetFloat64は、zを正確にfに設定し、zを返します。 31 // もしfが有限でない場合、SetFloatはnilを返します。 32 func (z *Rat) SetFloat64(f float64) *Rat 33 34 // Float32は、xに最も近いfloat32値と、 35 // fがxを正確に表現しているかどうかを示すbool値を返します。 36 // もしxの絶対値がfloat32で表現できる範囲を超えている場合、 37 // fは無限大となり、exactはfalseとなります。 38 // fの符号は、fが0であっても、常にxの符号と一致します。 39 func (x *Rat) Float32() (f float32, exact bool) 40 41 // Float64は、xに最も近いfloat64値と、 42 // fがxを正確に表現しているかどうかを示すbool値を返します。 43 // もしxの絶対値がfloat64で表現できる範囲を超えている場合、 44 // fは無限大となり、exactはfalseとなります。 45 // fの符号は、fが0であっても、常にxの符号と一致します。 46 func (x *Rat) Float64() (f float64, exact bool) 47 48 // SetFracは、zをa/bに設定し、zを返します。 49 // もしb == 0の場合、SetFracはパニックを引き起こします。 50 func (z *Rat) SetFrac(a, b *Int) *Rat 51 52 // SetFrac64は、zをa/bに設定し、zを返します。 53 // もしb == 0の場合、SetFrac64はパニックを引き起こします。 54 func (z *Rat) SetFrac64(a, b int64) *Rat 55 56 // SetIntは、zをxに設定します(xのコピーを作成します)そしてzを返します。 57 func (z *Rat) SetInt(x *Int) *Rat 58 59 // SetInt64は、zをxに設定し、zを返します。 60 func (z *Rat) SetInt64(x int64) *Rat 61 62 // SetUint64は、zをxに設定し、zを返します。 63 func (z *Rat) SetUint64(x uint64) *Rat 64 65 // Setは、zをxに設定します(xのコピーを作成します)そしてzを返します。 66 func (z *Rat) Set(x *Rat) *Rat 67 68 // Absは、zを|x|に設定します(xの絶対値)そしてzを返します。 69 func (z *Rat) Abs(x *Rat) *Rat 70 71 // Negは、zを-xに設定し、zを返します。 72 func (z *Rat) Neg(x *Rat) *Rat 73 74 // Invは、zを1/xに設定し、zを返します。 75 // もしx == 0の場合、Invはパニックを引き起こします。 76 func (z *Rat) Inv(x *Rat) *Rat 77 78 // Signは以下を返します: 79 // 80 // -1 if x < 0 81 // 0 if x == 0 82 // +1 if x > 0 83 func (x *Rat) Sign() int 84 85 // IsIntは、xの分母が1であるかどうかを報告します。 86 func (x *Rat) IsInt() bool 87 88 // Numはxの分子を返します。これは0以下になる可能性があります。 89 // 結果はxの分子への参照であり、xに新しい値が割り当てられると変更される可能性があります。逆も同様です。 90 // 分子の符号はxの符号に対応します。 91 func (x *Rat) Num() *Int 92 93 // Denomはxの分母を返します。これは常に> 0です。 94 // 結果はxの分母への参照であり、 95 // xが初期化されていない(ゼロ値の)[Rat] の場合、 96 // 結果は値1の新しい [Int] になります。(xを初期化するには、 97 // xを設定する任意の操作が適用できます、x.Set(x)を含む。) 98 // 結果がxの分母への参照である場合、 99 // 新しい値がxに割り当てられると変更される可能性があります。逆も同様です。 100 func (x *Rat) Denom() *Int 101 102 // Cmpはxとyを比較し、以下を返します: 103 // 104 // -1 if x < y 105 // 0 if x == y 106 // +1 if x > y 107 func (x *Rat) Cmp(y *Rat) int 108 109 // Addはzをx+yの和に設定し、zを返します。 110 func (z *Rat) Add(x, y *Rat) *Rat 111 112 // Subはzをx-yの差に設定し、zを返します。 113 func (z *Rat) Sub(x, y *Rat) *Rat 114 115 // Mulはzをx*yの積に設定し、zを返します。 116 func (z *Rat) Mul(x, y *Rat) *Rat 117 118 // Quoはzをx/yの商に設定し、zを返します。 119 // もしy == 0の場合、Quoはパニックを引き起こします。 120 func (z *Rat) Quo(x, y *Rat) *Rat