ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

やはり出歩かないとネタに困ります ほか

やはり出歩かないとネタに困ります

このところうまく眠れないのと朝っぱらから


とか言っちゃうくらいなのとで、家でずっとおとなしくしていました。
いつぞや言ったと思いますが、やっぱりネタがなくなります。普段から体調に気を付けないといけませんね。

.gitignoreでておくれたおはなし

研究で使っているソースコードをGitHubのプライベートリポジトリにあげることにしました。
しかしこれ便利ですね。Gitサーバー立てなくてもいいのですごく助かります。
で、このリポジトリをうちでさくっとcloneして動かしてみようと思ったのですが、どうも動いてくれない。なぜかと思ったら…
設定のコアがあるディレクトリが見当たらない
もしやと思って.gitignoreを見てみると、やっぱりパスが書いてありました。
迂闊にもほどがあります。気を付けないと…

0で割り算

最近ちょっと気になっている人が多い気がするのでまとめです。

算数的に考えてみる

たとえば、10個あるりんごを何人かに分けるという問題を考えましょう。
10人で分けるなら10÷10=1でひとり1個、5人なら10÷5=2でひとり2個…といった感じになりますね。
では、10個のりんごを0人で分けるとしたらどうなるでしょう?
「りんごがほしい人」がいないので考える意味がない、ということになると思います。

引き算の繰り返しということで考えてみる

○÷△=□…◇ というあまりのある割り算を考えます。*1
これは、「○から△を繰り返しいて、◇が△よりも小さくなったらやめる」という演算と解釈できます。△が1以上ならいつかは◇が△よりも小さくなります。しかし、△が0のときは、○からは何度でも引くことができてしまいます。これでは都合が悪いですね。

極限をつかってみる

さっきまでのお話から少々飛躍して極限で考えてみます。
ある正の実数aとxを考えます。
\lim_{x \to 0}\frac{a}{x}の結果は、反比例y=\frac{a}{x}について、xを正数側からy軸に近づけていって、x=0となったところですね。このときの結果は、正の∞です。
一方、\lim_{-x \to 0}\frac{a}{x}と、負数側から近づけたらどうなるでしょうか。これは負の∞となります。
このように、極限を使えば一応定義することはできるけど、その0が正数側から近づいた結果の0か負数側から近づいた0かで結果が大きく変わってしまいます。なので、\frac{a}{0}という式をぽんとおかれても、値を決めようがないということになります。

プログラミングではどうなってるの?

例外を吐く言語と、∞を返す言語の二つに分かれるようです。私が試せる範囲だと、

例外を吐く

Ruby

$ ruby -e 'puts 1/0'
-e:1:in `/': divided by 0 (ZeroDivisionError)
	from -e:1:in `<main>'

PHP

$ php -r 'echo 1/0;'
PHP Warning:  Division by zero in Command line code on line 1

C#*2

namespace Program {
    class Div0 {
        static void Main(string[] args)
        {
            int zero = 0;
            System.Console.WriteLine(1 / zero);
        }
    }
}
//System.DivideByZeroExceptionがスローされて終了する
∞を返す

C言語*3

#include<stdio.h>

int main(int argc, char *argv[])
{
    double div0 = 1.0/0;
    printf("%f\n", div0);
    return 0;
}
//結果
inf

VisualBasic.Net

Class Program
    Public Shared Sub Main(ByVal params As String())
        Console.WriteLine(1 / 0)
    End Sub
End Class
'結果
1.#INF

JavaScript

console.log(1/0)
//結果
Infinity

といったかんじでした。

*1:なお、ここで考える数はすべて1以上の正の整数か0とします

*2:Console.WriteLine(1/0);とするとビルド時に「定数0による除算です」というエラーが出てビルドに失敗する

*3:コンパイル時に警告が出る