Skip to content

printf formatting causes stack overflow #289

Closed
@ikirill

Description

@ikirill

I know it's not really well-defined to try to print a dual number like this, but it would be better if it failed more gracefully, for example by printing the number with the right formatting and omitting the partials, or printing the partials with the same formatting, or something.

julia> Pkg.status("ForwardDiff")
 - ForwardDiff                   0.7.0              master

julia> ForwardDiff.derivative(x -> (@printf "%f\n" x; x), 0.0)
ERROR: StackOverflowError:
Stacktrace:
 [1] fix_dec(::ForwardDiff.Dual{ForwardDiff.Tag{##3#4,Float64},Float64,1}, ::Int64) at ./printf.jl:949 (repeats 80000 times)

julia> ForwardDiff.derivative(x -> (@printf "%s\n" x; x), 0.0)
Dual{ForwardDiff.Tag{##5#6,Float64}}(0.0,1.0)
1.0

julia> ForwardDiff.derivative(x -> (@printf "%e\n" x; x), 0.0)
ERROR: StackOverflowError:
Stacktrace:
 [1] ini_dec(::ForwardDiff.Dual{ForwardDiff.Tag{##7#8,Float64},Float64,1}, ::Int64) at ./printf.jl:970 (repeats 80000 times)

julia> ForwardDiff.derivative(x -> (@printf "%.2e\n" x; x), 0.0)
ERROR: StackOverflowError:
Stacktrace:
 [1] ini_dec(::ForwardDiff.Dual{ForwardDiff.Tag{##9#10,Float64},Float64,1}, ::Int64) at ./printf.jl:970 (repeats 80000 times)

julia> ForwardDiff.derivative(x -> (@printf "%g\n" x; x), 0.0)
ERROR: StackOverflowError:
Stacktrace:
 [1] ini_dec(::ForwardDiff.Dual{ForwardDiff.Tag{##11#12,Float64},Float64,1}, ::Int64) at ./printf.jl:970 (repeats 80000 times)
julia> versioninfo()
Julia Version 0.6.0
Commit 903644385b (2017-06-19 13:05 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin13.4.0)
  CPU: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
  LAPACK: libopenblas64_
  LIBM: libopenlibm
  LLVM: libLLVM-3.9.1 (ORCJIT, haswell)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions