Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    okiko
    @okiko
    が 2009年11月10日 だったみたいです。
    Rei Matsushita
    @rei-m
    なるほど
    Toshihiro Shimizu
    @meso
    48の正解が気になる
    func Cbrt(x complex128) complex128 {
        z := complex128(1)
        recursive := func() complex128 {
            ans := z - (z * z * z - x) / (3 * z * z)
            if cmplx.Abs(ans - z) == 0 {
                return ans
            } else {
                return recursive(x, ans)
            }
        }
        return recursive();
    }
    こんな感じで書いたけど、意図と合ってるのかどうか...
    Daniel Perez
    @danhper
    これコンパイル通りますか?0引数取るはずの関数を引数2つで呼び出してる辺りやや怪しい気がします。func() complex128の中にrecursiveはまだ定義されていないはずなので、一旦varで宣言しないとダメかと思います。
    Goのコンパイラーは末尾再帰どこまで最適化してくれるんですかね。ループに変えてくれるのかなー
    Toshihiro Shimizu
    @meso
    あー
    しまった。みすってる。
    外に他のrecursive(complex128, complex128)なfuncを定義したまんまだった(別のやり方模索してた時に作ったやつ)
    Toshihiro Shimizu
    @meso
    うまくいかないなー。普通に再帰関数を別で定義して呼び出すのはいくんだけど、それだとクロージャ活用してないんだよなー
    Daniel Perez
    @danhper
    var recursive func(x, ans complex128) complex128
    recursive = func(x, ans complex128) complex128 {
    みたいな感じで書くと一応問題なくクロージャ使えると思いますけど、何がうまくいかないですか?
    Toshihiro Shimizu
    @meso
    runtime: goroutine stack exceeds 250000000-byte limit
    fatal error: stack overflow
    stackあふれるー。終了条件緩くしても
    func Cbrt(x complex128) complex128 {
        z := complex128(1)
        var recursive func() complex128
        recursive = func() complex128 {
            ans := z - (z * z * z - x) / (3 * z * z)
            if cmplx.Abs(ans - z) < 0.4 {
                return ans
            } else {
                return recursive()
            }
        }
        return recursive();
    }
    みたいに、0.4なら終わってくれるけど、それより小さくすると溢れちゃう。
    0.4とかだと精度悪すぎるー
    Daniel Perez
    @danhper
    んー、これはzの値は変わらなくないですか?
    Toshihiro Shimizu
    @meso
    あ、ほんとだ
    なんかどじってるな
    できたー
    Daniel Perez
    @danhper
    ちなみにこれforで書いた方が全然楽な気がします。
    const (
        E = 0.000000001
    )
    
    func Cbrt(x complex128) (z complex128) {
        z = complex128(1)
        for {
            d := ((z * z * z) - x) / (3 * z * z)
            if cmplx.Abs(d) < E {
                return
            }
            z = z - d
        }
        return
    }
    Toshihiro Shimizu
    @meso
    うん、そうなんだけど、functionとかクロージャの話の後だったので
    なので、この問いの意図を汲んだ答えになってるかを気にしてた
    Daniel Perez
    @danhper
    チュートリアル的にクロージャはフィボナッチで使って下さいって感じがしますね!
    Toshihiro Shimizu
    @meso
    この"Advanced Exercise"がこの場所にある意図がわからない!
    Daniel Perez
    @danhper
    channelがbufferedかどうかでどのようにパーフォマンスに影響するかは説明されてないですけど、ご存知の方いますか?
    Toshihiro Shimizu
    @meso
    時間だ...
    56終わったとこまでだ
    aoki
    @ringohub
    48
    Rei Matsushita
    @rei-m
    48 ><
    K.O.
    @Hi-king
    54
    Masato OSHIMA
    @mpon
    44
    Tsuyoshi UEHARA
    @tsuyosh
    50 (キリの良い数字
    Yuki Akiyama
    @you21979
    50
    Kazuhiro Kubota
    @k2wanko
    お疲れ様でした。
    uenot
    @uenot
    おつかれさまでした!
    Rei Matsushita
    @rei-m
    おつかれさまでしたー
    okiko
    @okiko
    お疲れ様でした
    Tsuyoshi UEHARA
    @tsuyosh
    おつかれさまでした!
    Toshihiro Shimizu
    @meso
    お疲れ様でした!
    hidashun
    @hidashun
    60。お疲れさまでした!
    Rei Matsushita
    @rei-m
    次回もよろしくおねがいします
    Daniel Perez
    @danhper
    お疲れ様でした。
    aoki
    @ringohub
    おつかれさまでした!
    Toshihiro Shimizu
    @meso
    第3回募集開始しました http://dwgo.connpass.com/event/8546/
    MATSUKI Hidenori
    @mazgi
    着席
    Masaru Irisawa
    @mass10
    宜しくお願い致します
    K.O.
    @Hi-king
    よろしくお願いしますー
    Naoyuki Kanezawa
    @nkzawa
    よろしくお願いします
    nightyknite
    @nightyknite
    よろしくお願いします!
    takyam
    @takyam-git
    おねしゃーす