Juliaには、有効数字の末尾にn
の丸め機能が組み込まれています。 signif(0.0229, 2)
は2桁の有効数字に丸められ、0.023
となります。有効数字がn桁に切り詰められるか
n
有効数字に切り詰めて切り捨てると、代わりに0.022
が得られますか?
Juliaには、有効数字の末尾にn
の丸め機能が組み込まれています。 signif(0.0229, 2)
は2桁の有効数字に丸められ、0.023
となります。有効数字がn桁に切り詰められるか
n
有効数字に切り詰めて切り捨てると、代わりに0.022
が得られますか?
まあ、それほど想像力はありません。 @edit signif(0.229,2)
を使用して、ソースを検索し、をfloor
に置き換えてください(正確なモジュール参照についてはBase.
が追加されています)。ここでの結果は次のとおりです。
function mysignif(x::Real, digits::Integer, base::Integer=10)
digits < 1 && throw(DomainError(digits, "`digits` cannot be less than 1."))
x = float(x)
(x == 0 || !isfinite(x)) && return x
og, e = Base._signif_og(x, digits, base)
if e >= 0 # for numeric stability
r = trunc(x/og)*og
else
r = trunc(x*og)/og
end
!isfinite(r) ? x : r
end
は与える:
julia> mysignif(0.0229,2)
0.022
印象的です。負数は正しく処理されません。私はあなたがそれを簡単に修正できると確信しています。 – clay
@clayはい、簡単に修正できます(実際には、ネガの動作はアプリケーションによって異なります)。修正するには、 'floor'を' trunc'に置き換えてください[私も答えでそれを行います] –
を私はメイプルでのバージョンを発見したとジュリアへの移植:
function signifChop(num, digits)
if num == 0.0 then
return num
else
e = ceil(log10(abs(num)))
scale = 10^(digits - e)
return trunc(num * scale)/scale
end
end
# Test cases for signifChop
println("$(signifChop(124.031, 5))")
println("$(signifChop(124.036, 5))")
println("$(signifChop(-124.031, 5))")
println("$(signifChop(-124.036, 5))")
println("$(signifChop(0.00653, 2))")
println("$(signifChop(0.00656, 2))")
println("$(signifChop(-0.00653, 2))")
println("$(signifChop(-0.00656, 2))")
'myfloor(X、D)=ラウンド(Xウィル-0.5 * 10.0 ^( - d)、d) '十分に良い? –
'myfloor(0.0229,2)'は '0.02'を返し、' 0.022'を返すべきです – clay
ああ...私は質問して、誤解しています。しかし、以下の答えには時間がかかるものの、実用的な提案があります。 –