gpt4 book ai didi

julia - 为什么 trunc() 不将 float 转换为整数?

转载 作者:行者123 更新时间:2023-12-03 16:21:21 35 4
gpt4 key购买 nike

做的时候trunc(3.5) ,它返回一个浮点数,3.0 , 为什么?

我知道你可以做trunc(Int64, 3.5) ,但不是 trunc 的目的将浮点数转换为整数?为什么它以这种方式工作?

最佳答案

让我们重点关注您通过 Float64 的案例至 trunc (分析可以类似地扩展到其他类型)。假设您要截断的值是 x .

首先注意,然后trunc始终可以执行 x 的截断到小于或等于它的最接近的整数值。简而言之 - 此操作始终定义明确,可以执行,快速且类型稳定。

如果我们想返回一个整数,我们有一个选择:我们是否想要类型稳定。
在 Julia 中,Base 中的答案是肯定的。但这意味着您必须返回 BigInt始终明确定义操作的值。但可能当你这样做时 trunc你不希望得到BigInt因为它会很贵。

另一种方法是返回一些其他整数类型,但是如果浮点数太大,您将不得不再次抛出错误 - 这很可能是您不想得到的。

这是一个显示问题的示例:

julia> x = 1e300
1.0e300

julia> trunc(x)
1.0e300

julia> trunc(Int, x)
ERROR: InexactError: trunc(Int64, 1.0e300)
Stacktrace:
[1] trunc(::Type{Int64}, ::Float64) at ./float.jl:703
[2] top-level scope at REPL[35]:1

julia> trunc(BigInt, x)
1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704443832883878176942523235360430575644792184786706982848387200926575803737830233794788090059368953234970799945081119038967640880074652742780142494579258788820056842838115669472196386865459400540160


所以总而言之 - 因为浮点数可以跨越比普通整数更广泛的值范围,唯一安全的选择是默认返回浮点数。

关于julia - 为什么 trunc() 不将 float 转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61838283/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com