はてなキーワード: 演算とは
長い間C言語を使いやすくするにはどうしたら良いか?ということはみんな検討してきている。
だが、その回答は動的型付けにすることで、Javascriptを使ったほうがいい。という結論だと思う。
それがこの20年か30年ぐらいの結論だよ。
なにか特殊なC言語がほしいなら、その機能をJavascriptで実装したほうが速い。究極的には数値演算用のJavascriptを生み出したほうが
C#でもなんでもいいけど、Cの正式な系譜からは切り離したほうがいい。
デスマとかの事故が現場で絶えなくなる。デスマを封じるにはCとJavascriptは少なくともプログラマーの適性で明確にわけないとダメだ。
メモリーがネイティブに直感的にイメージできないならC言語は触っちゃダメだ。 Javascriptで楽しいサービスを作ることに特化したほうがいい。
酷な言い方だが、適材適所だ。
■前提
■要件
死傷者を出すことなく、感情を挟まず、学術的に信用度の高い結果を完成させ、2カ国間で共有させること
■提案
特定の時間軸を決定し、大規模な演算を行う、ウォーシミュレーションゲームを提供する
・ウォーシミュレーションの初期パラメータについては、双方が提示する該当時間の国力や世相を示す「証拠」を元に設定する
・「証拠」に対しては、「反証」を行うことができる。「反証」は証拠と論説によるものであり、「反証」された「証拠」は失効し、パラメータ化できない。
・「証拠」も「反証」も、第三者がその内容を判断し、有効無効を決定する。決定する際には、その決定要因、決定論拠を書き添える必要がある。
・「反証」されず有効判定された「証拠」は、必ず認めなければならない。
・これら初期パラメータを元に、設定された時間の国際情勢と判断基準を元に、プレイヤーたる2カ国以外をAI制御させ、ゲームとする。
・操作方法については、ゲームとして製造する際に詳細を決定する
■提案に至る経緯
「正しい」とは主観であって、客観性がない。それは天動説が「正しい」とされた世界を経た、2013年に生きる全人類がもつ共通の認識である。
よって、「正しい歴史認識」という言葉は、「事実を元にした歴史認識」と言うべきである。
これならば、我々は、共通認識を行いうる。
現在、不幸にも我が日本国は、複数の国家から、「正しい歴史認識を持て」という謎の言葉を投げかけられており、相当に当惑している状態である。
ならば、事実を積み重ね手作り上げた仮想環境内で、当時の判断を追体験し、その当時の判断が狂気の沙汰だったのか、はたまた苦肉の策だったのか。もしくは必然だったのか。
それらを互いに知ればよのでは、という考えである。
上記要件を満たすようなシステムの構築は、実に大規模なものとなり、そもそもハードウェアから着想を変えて開発する必要があるものと考える。
よって、そのような機器が世に普及する手伝いとなるよう、これらを公共事業として開発し、半導体産業、IT産業に公金を注入し、
私は、流行りのSNSとやらをわりとぞんざいに使っているので、
誰であろうと基本的には全て承認するようにしている。
そのせいか、タイムライン上にいつの間にかへんちくりんな人間がいることも多い。
今日はその一例をここに記したいと思う。
彼はプログラミングに精通しているようで、どうやら情報系の学校に通う学生らしい。
彼はよく、流行りらしい関数型言語(Haskell?)やらアセンブル言語等の話題を取り上げ、
これがああなってこうで・・・等と、恐らく的確なのであろうコメントを発する。
最近の学生は勉強熱心であり意識も高いのだな、と思わせるには十分であった。
仕事をほんの少し楽にする為のこまいスクリプト程度なら書くこともある程度での知識を持つ人間である。
そんな彼の観察を時偶に続けていたところ、
彼がとあるウェブ上のプログラミングコンテストに挑戦した、という旨の発言が目に入った。
いつも難しいアルゴリズムや先進的なコーディングについて語る彼のことだから、
さぞかし優秀な成績なのだろう、と期待してコンテストのウェブサイトにアクセスし、彼の固有名で検索にかけた。
コンテストは4つの問題が出題される形式であり、それぞれ難度に差がつけられている。
1つは中学生でもコードの書き方さえ知っていれば解けるであろう問題。
1つはFizzBuzzを基本とし、それに些細な応用を付与した問題。
1つは前述のエイトクイーン問題から更に発展させた上で、高度な数学的思考を求める問題。
彼の結果は、初問正解のみであった。
提出されたコードは、会期を過ぎると誰でも閲覧が可能になる為、
彼のコードを覗いてみることにした私は、そこで更におかしな笑いがこみ上げた。
彼は、FizzBuzzがほぼ全く書けていなかった。
それどころか、基本的なループ処理や、型の扱いが出来ておらず、
素人の私から見ても、これがちんぷんかんぷんなコードであることは一目瞭然であった。
以前、彼はHaskellの話題に言及する中で逆FizzBuzz問題についても述べていた気がする。
確かに、私もそんな事が要求される場面があれば悩むだろうな、とその記事を読み感想を覚えたが、
彼は逆FizzBuzzどころかFizzBuzzすらマトモに記述できないのである。
「圏論が出来ないヤツは将来、プログラマーとしても技術者としても失格」
「構造体同士の四則演算は全メンバに同一の演算子を適用するのかな?」
彼は、一体何なのだ?
http://d.hatena.ne.jp/RepsolFireBlade/20130220/1361332690
それだけ、PHPって流行っている言語で、この問題も注目されているってことなのね。まあ、言語としてPerlよりはマシだと思うね。ってか私Perl嫌いかも?しかしPHPにも型がないところが嫌いなんだけど。
世が世ならこの破壊力は大きかった。
C系の構文を採用する言語の中でPHPだけが左結合などという非常識な仕様を採用している。そもそもCを真似して作ったのに、ここだけ「間違えて」実装しちゃったとしか思えない。で、それを後から「仕様だ!」って言い張っているんだろうなぁ。大人げないねぇ。素直にバグだって認めれば良いのに。実装のバグじゃなくて仕様のバグね。言語仕様として「三項演算は左結合です。」って言ってしまえば、その実装は正しい。私が言っているのは、仕様のバグ。つまり、仕様です、そう決まってます、と言っていること自体が間違っている。どう考えたっておかしいでしょ?
普通、色々書けば書くほど説得力は増すのだけど、書けば書くほど説得力が抜けていく。
あっちこっちで、ネタにされていた中に「今さら言語仕様変えるなんて、後方互換性はどうなる?」なんてのがあったけど、そんな非常識なプログラミングは存在しないだろうから問題ないと思う。その前に、後方互換性って今や死語じゃない?
いずれにしても、昔のプログラムを救うことを考えるより、今後も続々と増えるであろう「C系の言語から入ってくる人」を救うことを考えるべきだね。
それじゃ、とりあえず読みやすいソースコードを残して頂けると大変助かります。
このおっさんがすべき事は、このおっさんがどんなネストを書いてしまったのか、そのPseudo Codeを晒すこと、ただそれだけ。
メタが理解できないってことじゃないの?
プログラマだって、for文で書くと分かるけどΣで書くと分からないとか言い出す人結構いるし、
行列演算のプログラムは書けても、線形代数の一般論の言葉で書かれると全然わからないという人も多い。
ポインタがわかったって、ポインタのポインタのポインタとか言われるとだんだんこんがらがってくるし、
今時のパソコンをいきなり与えられた人(普通はそうだけど)は、そもそもポインタなんて機能が何故必要なのか理解できないと思う。
JavaとかPerlとかVBとかは、扱いたいデータを直接切り貼りするだけでプログラムとして成立するし、それで十分なわけで。
そのレベルでコンピュータの仕組みや、メモリの使い方を理解する必要性は、普通は全く感じられないからね。
それにポインタを意識しながらプログラミングするというのは、前述の演算に必要なデータ構造に加えて、メモリ管理上のデータ構造も扱うという、2重のデータ構造を考えないといけない。
これはプログラム初心者には全く想像できない領域だし、そうそう簡単な事じゃないと思うわ。
ましてやC言語の*pとp[]の交換性が、基本環境依存のデータ型のバイト長をいちいち把握しながらポインタ演算してアクセスなんて面倒でしょうがないから結構必須とか、そもそもポインタ演算を使いこなせればハードのリソースをビット単位で搾り取れて、それをアセンブラよりはシンプルかつ抽象的に実装できるC言語は非常に効率がいいとか、まず理解不能でしょ。
そんなことが必要な分野が世の中にはあるという現実すら知らないだろうし。
尤もマイコンキットから入って「メモリにデータをロードして、そのデータのメモリ上の格納場所がCPUから分かるように(ry」というアプローチなら、ポインタを使う以外に方法が無いので嫌でも覚えるだろうけど。
そういうことではない。
小学校算数の世界の「掛け算」は整数や実数上の通常の意味での積とは異なる演算なんだよ。
「整数×単位系」という空間上に定義された演算で、単位系の方に「単一単位からなる単位」(集合Aと書く)と、
A×B->Aという演算しか定義されていない(B×A->Aかもしらんがそこは知らない)のが小学校式。
もちろん、そんなしちめんどくさいことしなくても、単位系の代数構造が通常の数上の積演算の構造に従うことを
説明すれば可換性も含めて自明なわけだが、小学校教師の8割くらいは(そのブログの奴と同じように)単純に馬鹿なので
その辺ろくに理解してないし、残りも、特に頭の悪い子に合わせるためにそうしているようだ。
先日の「週6フリーターもWEBサービス作ってみました。」に触発されて、
IT系サラリーマン。別に仕事でWebとかプログラムとかはやってない。IT系企業に務めているというだけ。
でもそれだとこの先が無さそうなので自分でも何か作れないかと思ってるところに、1000を作ってみた〜を読んで奮起。
会社のエンジニアさんに「どんなの作るのが勉強になりますか」と相談したところ
「とりあえずそれ(1000Userアンテナ)と同じようなものを作ってみれば?」と投げやりに言われ、今に至る。
以前に「HTMLでWebサイトを作ろう!」みたいな本を読みながら、
何のプログラムも入っていないゲームの攻略サイトを作ったレベル。すぐ放置した模様。
上記の事を話したら、仕事で練習がてらに触らされる。四則演算ができる程度。
活かす場は無いが、情報収集は好きなのでそれをテーマにすることに。
カラダアンテナ
普段RSSを使っていて一番イライラする「違うタグなのに同じ記事をいくつも拾ってきやがる」を解消したいのが目的。
「なるべくAPIとかjQueryのプラグインとかを使うようにしてみたら?」という神(社内エンジニアGさん)の発言により、無駄に色々使って見ることに。
参考サイト
・Google AJAX Feed APIの使い方メモ →ぐぐって最初に出てきたサイト。お世話になりました。
ただこれだと複数のRSSを読み込んだ時に、例によって例のごとく同じURLの記事が別のタグのRSSからいくつも出てくる。
これを解消するにはRSSをマージして重複するのを消せばいいらしい。
解説:複数のRSSをまとめて、更に色々抜いたり加工したりしてくれるサービス
参考サイト
なんというかやりたいことが8割がた解決してしまった。
GoogleとYahooが手を組むとこんなに凄いのかと関心。本当はもっと色々出来るらしい。
参考サイト
記事のfaviconも出せないかな?と思ったらそれもはてブのAPIと同じようなサービスがあるらしい。
参考サイト
ソーシャルリンクのボタンが欲しかったので、1000Users超えさんのところでも紹介されていたのをそのまま使う事に。
参考サイト
最近はただでこんな動画が見れるサービスもあるんですね・・・エンジニアさんはほんとすごいです。
公開するにあたって色々用意したもの達。
解説:サーバー。
レンサバ探してたら何故かサーバーエンジニアのSさんからここを進められた。
安かったし評判もぼちぼちなのでこだわりもなく決定。
Webサービスって言ったら独自ドメインだろ!ということで480円セールをやっていたので取ってみる。
参考サイト
せっかくなので広告もつけたくなったので調べてみた。
GoogleAdsenseって結構簡単に設置できるんですね。
参考サイト
・AdSenseアカデミー →Google先生の公式ガイド
解説:iPhoneアプリのリンクを貼れる。楽天がやってるんですね。
解説:書籍のアフィリエイトはAmazonさん。思ったより簡単でした。
https://affiliate.amazon.co.jp/
あと、スクロールしたらついてくるってのをやってみた。カッコいい。
参考サイト
解説:作ったWebサービスを投稿できるサイト。アンテナサイト多いですな・・・。
解説:Webサービスをつぶやいて宣伝してくれるWebサービス?ありがたいです。
http://inajob.no-ip.org:10080/tsukutter/
参考サイト
正直全然面白いWebサービスではないのはわかってるのですが、
それでも非エンジニアでもそれっぽいものができるんだなあというのと、APIって凄いと思いました(小学生並みの感想)
色々調べながら「あ、こういうWebサービスがあったらいいかも」というアイデアはいくつか浮かんだので、
こんどはそれを実現できるようにもっと勉強してみたいと思います。
プログラムはclassに記述します。たとえばSampleという名前のclassを作る場合、Sample.csファイル内に次のように書きます。(C#の場合、ファイル名とクラス名は同一でなくても良い。複数のクラスを書いても良い)
public class Sample { }
プログラムはclass内のMainメソッドの先頭から実行されます。Mainメソッドは次のように書きます。
public class Sample { public static void Main( String[] args ) { // 処理を書く } }
Console.WriteLine( "Hello world" );
コメントです。
// 一行コメント /* 複数行コメント */
// 変数 int num;
データ型です。C#のデータ型には値型と参照型とがあります。以下は値型のデータ型です。
// int(整数)型 int num; // char(文字)型 char c; // float(単精度浮動小数点)型 float val; // double(倍精度浮動小数点)型 double val; // bool(論理)型 bool flag; // DateTime(日付)型 DateTime date;
以下は参照型のデータ型です。
// String型 String s; // 配列型 String[] array;
プログラムをコンパイルするには、コマンドラインで以下のようにします。
csc Sample.cs
プログラムを実行するには、コマンドラインで以下のようにします。
Sample.exe
mono ./Sample.exe
int、float、double型の変数に数値を代入できます。int型には整数だけ代入できます。float、double型には整数でも小数でも代入できます。
int i = 2; int i = 100000000; float num = 1.234f; double num = 1.234;
四則演算です。
num = 1 + 1; num = 1 - 1; num = 1 * 2; num = 1 / 2;
商の求め方です。割る数と割られる数が両方とも整数の場合、計算結果の小数点以下が切り捨てられます。
num = 1 / 2; // 0
割る数と割られる数のどちらかが小数の場合、計算結果の小数点以下が切り捨てられません。
num = 1.0 / 2; // 0.5 num = 1 / 2.0; // 0.5 num = 1.0 / 2.0; // 0.5
余りの求め方です。
// 余り mod = 4 % 2
インクリメントとデクリメントです。
// インクリメント ++i; // デクリメント --i;
String str = "abc";
// 結合 String join = "aaa" + "bbb"; // 分割 String[] record = "aaa,bbb,ccc".Split( "," ); // 長さ int length = "abcdef".Length(); // 切り出し "abcd".Substring( 0, 2 ) // abc // 検索 int result = "abcd".IndexOf( "cd" ) // 見つかった場合はその位置、見つからなかった場合は-1が返る
配列です。
// 配列の宣言 int[] array;
配列の生成です。配列の生成時には要素数を指定するか、初期データを指定します。
int[] array; // 要素数を指定して配列を生成 array = new int[5]; // 初期データを指定して配列を生成 array = new int[] { 1, 2, 3 }; // 宣言と同時に配列を生成 int[] array2 = new int[5];
配列の要素の参照と代入です。
// 要素の参照 array[0] array[1] // 要素の代入 array[0] = 1; array[1] = 2;
array_num = array.Length;
int[] from = new int[] { 1, 2, 3 }; int[] to = new int[5]; from.CopyTo(to, 0);
if文です。
if ( 条件 ) { }
if ~ else文です。
if ( 条件 ) { } else { }
if ~ else if文です。
if ( 条件 ) { } else if ( 条件 ) { }
while文です。
int i = 0; while ( i < 5 ) { // 処理 ++i; }
for文です。
for ( int i = 0; i < 5; ++i ) { // 処理 }
int[] fields = new int[] { 1, 2, 3 }; foreach (int field in fields) { // 処理 }
C#では関数をメソッドと言います。メソッドを作るには次のようにします。戻り値を返却するにはreturn文を使います。
static int sum( int num1, int num2 ) { int total; total = num1 + num2; return total; }
ファイル入出力です。ファイル入出力を行うには、プログラムの先頭に以下を記述します。
using System.IO;
以下がファイル入力の雛形になります。ファイルのオープンや読み込みに失敗した場合、catch節に処理が移ります。
String filename = "text.txt"; StreamReader reader = null; try { reader = new StreamReader(filename); String line; while ((line = reader.ReadLine()) != null) { } } catch (IOException e) { // エラー処理: } finally { if (reader != null) { try { reader.Close(); } catch (IOException e) { } } }
またはC#ではusing ステートメントと言うものがあり、この様にも書ける
String filename = "text.txt"; using (StreamReader reader = new StreamReader(filename)) { try { String line; while ((line = reader.ReadLine()) != null) { // 読み込んだ行を処理 } } catch (IOException e) { // エラー処理: } }
usingをつかうとCloseがなくなったことからわかるようにusing(){}を抜けるときに自動的にDisposeメソッドを呼び出し、オブジェクトを廃棄する。その分コードがスッキリするが、使いにくい場面もあるので考えて使うこと。
以下がファイル出力の雛形になります。ファイルのオープンや書き込みに失敗した場合、catch節に処理が移ります。
String filename = "text.txt"; StreamWriter writer = null; try { writer = new StreamWriter(filename)); writer.WriteLine("abc"); writer.WriteLine("def"); writer.WriteLine("fgh"); } catch (IOException e) { // エラー処理: } finally { if (writer != null) { writer.Close(); } }
こちらもusingを使って書ける。が、割愛する。
C#でよく出てくる知っておいたほうがよい文法の一覧です。
繰り返し文の途中で抜けるにはbreak文を使用します。
for ( i = 0; i < 5; ++i ) { if ( 条件 ) { break; // 条件を満たす場合、for文を抜ける。 } }
残りの部分処理をスキップし、次の繰り返しに進むにはcontinue文を使用します。
for ( i = 0; i < 5; ++i ) { if ( 条件 ) { continue; // 条件を満たす場合、残りの部分処理をスキップし、次の繰り返しに進む。 } }
例外を投げるにはthrow文を使用します。
throw new Exception( "Error messsage" );
try { // 例外が発生する可能性のある処理 } catch ( Exception e ) { // 例外発生時の処理 }
ポインタ、参照(リファレンス)、束縛(バインディング)、それぞれ似てるけど同様に語ると混乱の元ではないかと。
ポインタはメモリアドレスに型情報をくっつけたもの。加減算できる点が特徴で、それはメモリアドレスの概念由来だろう。
変数というメモリ上の記憶域を指すフィジカルに近い概念で、配列の運用(*p++で回すとか)、引数の参照渡し(コピー抑止、複数戻り値の実現)、メモリそのものの管理(malloc)あたりで、基本手作業による最適化のための仕組みという側面が近いと思う。
perlだと、変数はやっぱり記憶域ではあるけれど概念として一段抽象化されていて、メモリという連続した領域じゃなく独立した領域の集合となっているから、リファレンスの加減算はなし。
また、配列も単なるメモリの並びからより抽象化してリストもできたから、配列運用や複数戻り値もリストがあるのでリファレンスに頼ることはなくなる。
ただ、オブジェクトの概念があって、オブジェクトをオブジェクトとして入れる変数は用意せずリファレンスとすることで、文法上の変数の型を増やさない、コピー時のコンストラクタの問題を回避するなどのほか、オブジェクトの概念を援用して無名関数や無名変数、ファイルハンドルなども変数=引数として扱えるようにした。
で、pythonはもう一段推し進めて、今までの数値や文字、配列もオブジェクトとみなし、変数はすべてオブジェクトを指し示すもので、記憶域は変数としてあるのではなくオブジェクトとしてあり、変数にリファレンスという特別なものがあるのではなくなり、変数は記憶域をもっていて値が代入されるものではなく、既にあるオブジェクトに変数名という名前(ラベル)を付けて束縛する行為とされる。
見方を変えると変数はすべてにおいてリファレンスで、代入とは値そのものの代入でなく値へのリファレンスの代入で、引数も参照渡しであるが、引数に代入したところでリファレンスが変わるだけで元の値が変わるわけではなく、しかし他の演算などでは自動的にデリファレンスされており、単純な数値や文字列など、自身を変更する機構を持たない(できない)ものにとっては実質的に今までとの違いはないに等しい。隠ぺいといえば隠ぺいか。
java, javascript, rubyもおおむねこの考え方でよかったと思う。
ただ、phpは若干両者が混じったところがあって微妙なところがある。
参考
基本的には前項の内容に関する指摘・修正等はトラックバックでしていただいた通りです。
少しマイルドな形でトラックバックを利用させていただき、また元の疑問に対して再提示しましょう。
・代数的な意味での「無限大」、極限で用いる「無限大」、複素関数の意味での「無限大」は異なる。
→無限大、という言葉は様々な定義、文脈上で発生する一概念であり、ひとまとめに語ることはできない。
→ 様々な観点でとらえらることができるが、∞は四則演算可能な数とは考えないのが無難。
四則演算可能とする立場でも、通常の四則演算則は成立しないことが分かっているため、
高校の間では考えないのが良い。
高校の間でこの表現に触れるのは微分だけであり、そこなら触れなくても大丈夫。
どうしても触れたい場合は、解析で用いるε-δ論法の軽い解説をするのが良いです。
・不定形の極限について
不定形の極限という表現そのものが(便利ではあるが)危険なので、使用しない。
→代数としての無限大と、極限値としての無限大との混同の怖れがあるため。
(受験期にこれを混同することがそれほど問題とは思えないのですが、とはいえ生徒の今後の混乱を招く可能性もあります。)
次のような表現、説明とする。
ここまで書いて、
がナゼ無限大にならないことがあるかを説明するには、
数列同士の差が完備性を持っていることについて=コーシー数列についての説明をしないといけないことに気付きまして。
この3つの条件について、「数学が苦手な生徒に」「分かりやすく」説明するプランを何か考えないといけないですね。
・暫定として
数列Anと数列Bnの差を取る時、nがある一定以上の値とする。以降、δAn>δBnならば、An-Bnは常にその差分だけ増加していく。
ずっとδA =δBn ならば、差は0。
(*:1値の取り方によってはアウト。差分数列がコーシー数列である場合。)
数列Anで数列Bnを割る時、nがある一定以上の値とする。その商Cnが無限大に発散するならば、
An/Bnは無限大に発散する。
(*:2値の取り方によってはアウト。数列がコーシー数列である場合。)
また暇があったら考えます。
http://anond.hatelabo.jp/20120418161834
高校生に教えるって前提なら極限の話になるんだから、それなら∞は「正の無限に発散する」の省略表現であって、何か特定の数を表すかのように言うのが誤解のもと。
「∞ + ∞ = ∞」とか「2 * ∞ = ∞」とかも極限の和や積の性質を表す慣用表現。「∞ - ∞」が定まらないのも極限の性質による。
理系全員εδを理解しろとは言わないけど、教える立場になるなら理解した上で崩した説明しろよと。εδなんていくらでも解説してる本があるし、中根美知代『ε-δ論法とその形成』みたいな数学史の本も手軽に読めるんだしさ。
それと濃度や順序数の演算だったら\alephやωを使うから、わざわざ∞を使って誤解を誘発しなくてもいい。極限の話とは全然別の文脈。ごっちゃに論じてもおかしくなるだけ。
http://anond.hatelabo.jp/20120418132903
tbが入っていて嬉しい限り。
まず、リーマン球面については考えない。
(というか、リーマン球面を高校レベルで考慮において説明しようとすると、彼らの習うレベルを超えた補足が必要になるため、それは省く。ただし、嘘を重ねている分については一部補足してます。∞と普通の数は越えられない数がある。)
で、∞ + X = ∞ 、∞ + ∞ = ∞、 ∞ * 2 = 2∞
周りについては、もうちょっと基本を押さえた説明を考えなおさないといけないなぁ。
∞ + ∞ = ∞ については、 ここで左辺後件で加えている∞は、左辺前件で提示している∞とは「異なる」∞である疑いが強い。
(前件が記号としての∞、後件が不可算実数としての∞、右辺は記号としての∞)
ということは、立式化プロセスや記号表現といった、日常言語と数学記号間の翻訳作業に問題がある可能性が高い。
すんなりうまくいく説明を誰かしてくれていないだろうか。
数学と言う閉じた世界の人は誰もするわけはないので、こういう批判がすぐ来る場所で数打つしかないんだろうな。
http://anond.hatelabo.jp/20120418003806
塾でもよく訊かれるので解説を。
無限(+∞)というのは、「私達が理解できないくらい大きい数」ということを表す記号です。
そういうテキトウなことを塾で教えるなよ。
「∞」についての四則演算を考えてる文脈なら「∞」は通常のどの実数よりも大きいと「定義された」元にすぎない。「∞ + ∞ = ∞」と定義してる文脈なら普通「2 * ∞ = ∞」でもあるから
∞ + ∞ = 2 * ∞
は成立する。あるいは複素数(リーマン球面)で考えてるなら「∞ + ∞」も定義されないから、
が成り立たない。それから、
ちなみに、∞ - ∞ 、∞/∞ 、(n^∞)^(1/∞)は同様の理由で、その結果を私達が知ることはできません。この形式を、不定形の極限と言います。神ならぬ私達では、その結果は知りえないのです。
は極限の話で、「∞」を含んだ四則演算とは別の話。
http://kanasoku.blog82.fc2.com/blog-entry-22498.html
66 以下、名無しにかわりましてVIPがお送りします :2011/11/08(火) 23:44:28.30 ID:PjCFZfxU0
理由を聞いても理解できない
塾でもよく訊かれるので解説を。
無限(+∞)というのは、「私達が理解できないくらい大きい数」ということを表す記号です。
∞ + ∞ = ∞ と定義します。私達が理解できないくらい大きな数を加えあっても、それが理解できないくらい大きいことに変わりはありません。
なぜ、∞ + ∞ = 2 * ∞ ではないのでしょうか? それは、∞は我々が知りえない数だからです。つまり、∞ = ∞ という計算が、 「私達の知っている意味で」等号計算が正しいかどうかなんて、誰も知らないからです。
例を挙げましょう。
私達が1~9の数しか知らず、9より大きな数を数えることができなかったとします。
そして、私達からは知りえない四次元生命体によれば、9<A<B<C<D...という数が続いているとします。(便宜的に、10以上の数をA~Zで代替します。11=A、12=B,13=C...と換算されるとお考えください。)
私達は、A以上の数を知らないので、9より大きい数はとりあえず全て∞として扱います。
さて、
∞ + ∞ という計算があったとして、「実は、四次元生命体から見れば、」その計算は A + B であったとします。(すると、A + B = U となります。)
しかし、私達はあくまで9までしか数字を知らないので、∞が「実際はいくつの数字になるか」知ることができず、よって演算結果を知ることもできません。
知りえるのは、9 < ∞ より、∞ + X ( >0 ) = ∞ ということだけです。
ここから考えると、∞ + ∞ = 2 ∞ はひどくナンセンスであることが分かります。四次元生命体からすると、A + B = U なのに、人間は愚かにも、A + B = 2 * A ( = T) と答えているのです。算数もできないのか! と。
これは、∞ - ∞ について顕著に現れます。∞ は Aなのでしょうか? Bなのでしょうか? それともZなのでしょうか? いやいや、実は四次元生命体にも知りえない、更に高次元の数なのでしょうか? それは分かりません。
仮に ∞ - ∞ が、 A - B だとします。だとすると、結果は - 1 となりますが、これは我々には知りえません。仮に B - Aだとします。だとすると、結果は 1 になりますが、これは我々には知りえません。 つまり、∞ - ∞ は、∞ が私達が知りえない数であるが故に、「その結果を知ることができない」演算なのです。
ご理解いただけたでしょうか。 ∞ は、私達が知りえない禁断の領域への演算なのです。であるが故に、この記号を用いることで、本来知りえないことを、私達は知ることができます。その意味で、非常に便利なのです。
ちなみに、∞ - ∞ 、∞/∞ 、(n^∞)^(1/∞)は同様の理由で、その結果を私達が知ることはできません。この形式を、不定形の極限と言います。神ならぬ私達では、その結果は知りえないのです。