github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/math/big/floatconv.go (about)

     1  // Copyright 2015 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 string-to-Float conversion functions.
     6  
     7  package big
     8  
     9  import (
    10  	"github.com/shogo82148/std/fmt"
    11  )
    12  
    13  // SetStringは、zをsの値に設定し、zと成功を示すブール値を返します。
    14  // sは、基数引数0で [Float.Parse] によって受け入れられるのと同じ形式の浮動小数点数でなければなりません。
    15  // 成功するためには、文字列全体(プレフィックスだけでなく)が有効でなければなりません。
    16  // 操作が失敗した場合、zの値は未定義ですが、返される値はnilです。
    17  func (z *Float) SetString(s string) (*Float, bool)
    18  
    19  // Parseは、指定された変換基数で仮数を持つ浮動小数点数のテキスト表現、
    20  // または無限大を表す文字列を含むsを解析します(指数は常に10進数です)。
    21  //
    22  // 基数が0の場合、アンダースコア文字 "_" は基数のプレフィックスと隣接する数字の間、
    23  // または連続する数字の間に現れることがあります。そのようなアンダースコアは、
    24  // 数値の値や返される数字の数に変化を与えません。アンダースコアの配置が間違っている場合、
    25  // 他にエラーがない場合に限り、エラーとして報告されます。基数が0でない場合、
    26  // アンダースコアは認識されず、したがって、有効な基数点または数字でない他の任意の文字と同様に、
    27  // スキャンを終了します。
    28  //
    29  // zを対応する浮動小数点値の(可能性のある丸められた)値に設定し、
    30  // z、実際の基数b、およびエラーerr(ある場合)を返します。
    31  // 成功するためには、文字列全体(プレフィックスだけでなく)が消費されなければなりません。
    32  // zの精度が0の場合、丸めが効く前に64に変更されます。
    33  // 数字は次の形式でなければなりません:
    34  //
    35  //	number    = [ sign ] ( float | "inf" | "Inf" ) .
    36  //	sign      = "+" | "-" .
    37  //	float     = ( mantissa | prefix pmantissa ) [ exponent ] .
    38  //	prefix    = "0" [ "b" | "B" | "o" | "O" | "x" | "X" ] .
    39  //	mantissa  = digits "." [ digits ] | digits | "." digits .
    40  //	pmantissa = [ "_" ] digits "." [ digits ] | [ "_" ] digits | "." digits .
    41  //	exponent  = ( "e" | "E" | "p" | "P" ) [ sign ] digits .
    42  //	digits    = digit { [ "_" ] digit } .
    43  //	digit     = "0" ... "9" | "a" ... "z" | "A" ... "Z" .
    44  //
    45  // 基数引数は0、2、8、10、または16でなければなりません。無効な基数引数を提供すると、
    46  // 実行時にパニックが発生します。
    47  //
    48  // 基数が0の場合、数値のプレフィックスが実際の基数を決定します:プレフィックスが
    49  // "0b"または"0B"は基数2を選択し、"0o"または"0O"は基数8を選択し、
    50  // "0x"または"0X"は基数16を選択します。それ以外の場合、実際の基数は10であり、
    51  // プレフィックスは受け入れられません。8進数のプレフィックス"0"はサポートされていません(先頭の
    52  // "0"は単に"0"と見なされます)。
    53  //
    54  // "p"または"P"の指数は、基数10ではなく基数2の指数を示します。
    55  // 例えば、"0x1.fffffffffffffp1023"(基数0を使用)は、最大のfloat64値を表します。
    56  // 16進数の仮数については、指数文字が存在する場合、'p'または'P'のいずれかでなければなりません
    57  // ("e"または"E"の指数指示子は、仮数の数字と区別できません)。
    58  //
    59  // エラーが報告された場合、返される*Float fはnilで、zの値は有効ですが定義されていません。
    60  func (z *Float) Parse(s string, base int) (f *Float, b int, err error)
    61  
    62  // ParseFloatは、指定された精度と丸めモードでfを設定した状態のf.Parse(s, base)と同じです。
    63  func ParseFloat(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)
    64  
    65  var _ fmt.Scanner = (*Float)(nil)
    66  
    67  // Scanは、[fmt.Scanner] のサポートルーチンで、zをスキャンされた数値に設定します。
    68  // これは、浮動小数点値に対して [fmt.Scan] がサポートする動詞を持つ形式を受け入れます。それらは次のとおりです:
    69  // 'b'(バイナリ)、'e'、'E'、'f'、'F'、'g'、'G'。
    70  // Scanは±Infを処理しません。
    71  func (z *Float) Scan(s fmt.ScanState, ch rune) error