パスワードを忘れた? アカウント作成
10824076 story
数学

ドミノ倒しで論理演算に挑戦 37

ストーリー by hylom
中学校あたりでやってみると楽しそう 部門より

「数字」に関するさまざまな動画を作っているプロジェクト「numberphile」が、ドミノ倒しによって論理演算を実装するというチャレンジを行った(ITmedia)。

1本のドミノの列で1つのビットを示し(ドミノが立っていれば0、倒れていれば1)、さらにドミノの列を特別な並べ方で交差させることで、OR/AND/XOR/NOTという論理演算を実装するというもの。チャレンジでは「9+3」という演算を実行したが、最終的には途中で計算通りに倒れなかったドミノがあったために正しい演算結果は得られなかったそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by ymasa (31598) on 2014年04月12日 6時30分 (#2580324) 日記

    ドミノというとドミノ倒ししか思い付けないほど、
    ドミノってドミノ倒しにしか使われていない。

    • by Anonymous Coward

      ピザ屋があるじゃん

      • by Anonymous Coward

        Lotus Dominoがでてこねーとはなぁ

        • by Anonymous Coward

          ずばりドミノ回路がありますが…

    • by Anonymous Coward

      麻雀はドミノの派生物と考えていいらしいので、日本ローカルでは麻雀という姿で大人気という感じでしょうか。

      チェスやバックギャモンなど王侯貴族に愛好されたゲームは記録に残りやすいのですが、
      どうもトランプやドミノといった庶民の間に流行したゲームの起源や記録というのは、あまり残らないようです。
      今のところ定説となっているのは中国起源のゲームが18世紀にイタリアを通じて伝わり、
      独自のスタイルを確立しながら急速にヨーロッパ全土に広まったという説です。
      http://www.geocities.jp/unoassoc/domino.html [geocities.jp]

      (麻雀の起源の)最も有力な説は清の同治年間(1862 - 1874年)に寧波の人陳魚門が、
      明代(1368 - 1644年)からあったカードゲーム「馬吊(馬弔、マーディアオ)」と「骨牌」というゲームを
      合体させて麻雀を完成させたというものである。
      http://ja.wikipedia.org/wiki/%E9% [wikipedia.org]

  • というかイベント同期のための専用ラッチがほしいですね。
    (これから見るんだけど)

    # 論理素子で組むわけにはいかないので、なんかしらの専用の作りで機能だけ実現、とか

    --
    M-FalconSky (暑いか寒い)
  • by Anonymous Coward on 2014年04月12日 3時37分 (#2580302)

    結果が全てではない
    過程も大事なのだ

    • むしろピタゴラ装置の方が楽かもしれない。
      例えばボールを信号にする場合、ANDならボール1個を落とし穴に落とせば良いし、ORなら1個通ったら通せんぼ、NOTならシーソーとか使えるわけですし、別経路でクロック用ボールを流せば同期も取れます。

      今回のドミノもクロック経路を別に用意すればマシになったのかも。
      先に入力で経路を適切に破壊して、クロック経由で次の段へ出力すれば大分マシになったんじゃ。
      ただし、設計と本数が大変になりそうなので非現実的だったのかもしれませんが。

      親コメント
  • by zakkaeye (46682) on 2014年04月12日 5時57分 (#2580321) 日記

    こういうの好きだなあ。
    シフト命令実行するとドミノ牌が一端から落ちてくるので、bit bucket(『ハッカー英語辞典』p.31)が必要になるじゃないか!

  • by sameshima (10060) on 2014年04月12日 11時06分 (#2580417) 日記
    キャリー伝搬を実感しました。キャリールックアヘッドは大変だ。
    不具合の原因は床の凹凸と位置誤差によるノイズ(1/fノイズみたいなもの?)だとすると、
    ドミノのサイズ(ゲートサイズ)を大きくすれば、誤動作は減ると思う。
    回路を忘れてしまいましたが、リレーの接点に最適化した加算回路を模せばドミノの数は減る?
    揮発計算だから1bit ALUは使えないか。。
    • by Anonymous Coward

      誤り訂正回路ってこういう単純な計算の集合体みたいなものだから、

      ここまで単純な計算で誤り訂正を入れようと思ったら、同じ計算を3重以上にして多数決回路でも入れないと。

      #そして多数決回路でエラーが出ると。

  • by SteppingWind (2654) on 2014年04月12日 16時48分 (#2580630)

    単電子論理回路の実装って難しそうだな, と思っていたら, 実際に単電子ドミノ論理回路を研究してる人 [ynu.ac.jp]がいた.

  • by Anonymous Coward on 2014年04月12日 20時40分 (#2580781)

    動画中、AND回路 [youtube.com]とXOR回路 [youtube.com]の単体での動作させて動作説明をしているシーンがあります。
    両方にTrueを入れた結果、AND回路の出力はFalse、XOR回路の出力はTrue。

    …いや、そりゃ、9+3=30にもなりますわ。

    • by Anonymous Coward

      失敗の原因を見せてるだけで、常にそういう結果になるわけじゃないんだけど…

  • by Anonymous Coward on 2014年04月12日 5時13分 (#2580313)

    それにくらべてANDの複雑さは、泣ける。

    • 複雑さもそうだが、タイミングもかなり厳しくみえる。
      あとXORは信号の反射で失敗していたし。
      あのクネクネ曲がった経路も含めマザーボードかよ?

      ところで、この手のイベントが終わったあと、あの大量のドミノはどうするのだろう? スタッフがおいしく頂くの?

      親コメント
    • by Anonymous Coward

      > OR/AND/XOR/NOTという論理演算を実装するというもの

      どうやればNOTを実装できるか思い付かない。
      falseの状態からtrueの状態を作り出すには、何らかの外的補助入力が要るような。

      • by Anonymous Coward on 2014年04月12日 12時55分 (#2580474)

        xorを作って、一方の入力をtrueに

        falseをtrueにできないので、入力タイミングの順序は重要です

        親コメント
        • オフトピぎみだけど

          if (IsEmpty(xx) == true)

          とか書いちゃう人がいまだに多くて困る。

          この書き方を嫌って、他人が書いてるのまで(可能なら)書き換えてるような事続けてたら、
          このトピのコメントまで拒否反応でるようになってきたw

          親コメント
          • それ、本当にTrue/Falseだけが帰ってくるか、仕様変更も有り得ないとちゃんと確認してますか?
            実はパラメータやクラスの状況によってはTrue/False以外にエラーコードが帰りますみたいな罠設計になってたら、余計な事してバグを作りこんでるだけですよ?

            親コメント
          • by Anonymous Coward

            そんなんあんたの好き嫌いじゃなくてコーディング規約で決めることだろ
            コードレビューでしっかりと条件を確認できるようにするために
            冗長だとわかっていながらIsNull() == trueとか明示することだってあるしね

            勝手に自分流に直すのやめた方がいいんじゃないですかね?
            それが嫌なら一人で作ってろよ

            • by Anonymous Coward
              それで何かが明示されるんなら(IsNull() == true) == trueと書いてもっと明示した方がよくないですかね?
              • それもいいけど、論理演算をきちっり理解していることをアピールするために
                こういう書き方はどや?!

                if (IsNull() != true) {
                 // 処理無し
                } else {
                 // 何かの処理
                    :
                    :
                }

                #マジメにこういう書き方するヤツいるのよ。
                 冗長だとわかって明示するってステキよね。

                親コメント
              • by Anonymous Coward

                お前の使ってる処理系は論理比較結果の真理値が信用できないの?
                そんな言語捨てちまえよ

              • by Anonymous Coward

                (#2581141) へのコメントだよね?

      • XOR の片方に常に1を入れれば
        出力側は反対側の NOT になるよ

        常に1を入れることが、補助入力に相当しています

        親コメント
        • by Anonymous Coward

          #2580781に書かれているビデオを見ると、XORの入力タイミングは
          2つ入力がドンピシャに一致しないと動かないね。

          常に1を入れたのと同じ結果を得るなんて神業。

  • by Anonymous Coward on 2014年04月12日 8時56分 (#2580361)

    これが実用化された暁には、過去、プログラマとは別に「キーパンチャー」なる職業が存在していたように
    またプログラマとは別の「ドミノ並べer」なる職業が誕生するのだろうか。

  • by Anonymous Coward on 2014年04月12日 9時44分 (#2580382)

    IF YOU MULTIPLY SIX BY NINE. 次は乗算器で6×9だな。答えは先にわかっているけど。

typodupeerror

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

読み込み中...