stdlib_str2num 模块

stdlib_str2num 模块提供将字符转换为数值类型的过程和接口。当前支持:integerreal。 (规范)

此代码改编自 https://github.com/jalvesz/Fortran-String-to-Num,作者是 Alves Jose,并感谢该主题中所有讨论的参与者 https://fortran-lang.discourse.group/t/faster-string-to-double/

当前提案的已知精度限制:转换为双精度,精确到 epsilon(0.0_dp) 例如

输入:123456.78901234567890123456789012345678901234567890+2

格式化读取:12345678.90123457

to_num:12345678.90123457

差异绝对值:0.1862645149230957E-08

差异相对值:0.1508742584455759E-13%

转换为四精度可能会在约 200*epsilon(0.0_qp) 处发生偏差 例如

输入:0.140129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125E-443

格式化读取:0.140129846432481707092372958328991608E-443

to_num:0.140129846432481707092372958328996233E-443

差异绝对值:0.4625E-475

差异相对值:0.3300E-029%



接口

公共接口 to_num

将字符串转换为数字 (规范)

  • 私有元素函数 to_int8(s, mold) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=*), intent(in) :: s

    输入字符串

    integer(kind=int8), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    返回值 integer(kind=int8)

    输出 integer(int8) 值

  • 私有元素函数 to_int16(s, mold) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=*), intent(in) :: s

    输入字符串

    integer(kind=int16), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    返回值 integer(kind=int16)

    输出 integer(int16) 值

  • 私有元素函数 to_int32(s, mold) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=*), intent(in) :: s

    输入字符串

    integer(kind=int32), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    返回值 integer(kind=int32)

    输出 integer(int32) 值

  • 私有元素函数 to_int64(s, mold) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=*), intent(in) :: s

    输入字符串

    integer(kind=int64), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    返回值 integer(kind=int64)

    输出 integer(int64) 值

  • 私有元素函数 to_sp(s, mold) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=*), intent(in) :: s

    输入字符串

    real(kind=sp), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    返回值 real(kind=sp)

    输出 real(sp) 值

  • 私有元素函数 to_dp(s, mold) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=*), intent(in) :: s

    输入字符串

    real(kind=dp), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    返回值 real(kind=dp)

    输出 real(dp) 值

公共接口 to_num_from_stream

将字符串中的值流转换为数字 (规范)

  • 私有函数 to_int8_from_stream(s, mold, stat) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=:), pointer :: s

    输入字符串

    integer(kind=int8), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    integer(kind=int8), intent(inout), optional :: stat

    返回值 integer(kind=int8)

    输出 integer(int8) 值

  • 私有函数 to_int16_from_stream(s, mold, stat) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=:), pointer :: s

    输入字符串

    integer(kind=int16), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    integer(kind=int8), intent(inout), optional :: stat

    返回值 integer(kind=int16)

    输出 integer(int16) 值

  • 私有函数 to_int32_from_stream(s, mold, stat) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=:), pointer :: s

    输入字符串

    integer(kind=int32), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    integer(kind=int8), intent(inout), optional :: stat

    返回值 integer(kind=int32)

    输出 integer(int32) 值

  • 私有函数 to_int64_from_stream(s, mold, stat) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=:), pointer :: s

    输入字符串

    integer(kind=int64), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    integer(kind=int8), intent(inout), optional :: stat

    返回值 integer(kind=int64)

    输出 integer(int64) 值

  • 私有函数 to_sp_from_stream(s, mold, stat) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=:), pointer :: s

    输入字符串

    real(kind=sp), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    integer(kind=int8), intent(inout), optional :: stat

    返回值 real(kind=sp)

    输出 real(sp) 值

  • 私有函数 to_dp_from_stream(s, mold, stat) result(v)

    参数

    类型 意图可选 属性 名称
    character(len=:), pointer :: s

    输入字符串

    real(kind=dp), intent(in) :: mold

    哑元参数,用于在编译时消除泛型接口的歧义

    integer(kind=int8), intent(inout), optional :: stat

    返回值 real(kind=dp)

    输出 real(dp) 值