「演算」を含む日記 RSS

はてなキーワード: 演算とは

2013-06-18

長い間C言語を使いやすくするにはどうしたら良いか?ということはみんな検討してきている。

だが、その回答は動的型付けにすることで、Javascriptを使ったほうがいい。という結論だと思う。

それがこの20年か30年ぐらいの結論だよ。

 

なにか特殊なC言語がほしいなら、その機能Javascriptで実装したほうが速い。究極的には数値演算用のJavascriptを生み出したほうが

初心者向けC言語を作るより速い。

C#でもなんでもいいけど、Cの正式な系譜からは切り離したほうがいい。

 

デスマとかの事故現場で絶えなくなる。デスマを封じるにはCとJavascriptは少なくともプログラマーの適性で明確にわけないとダメだ。

メモリーネイティブ直感的にイメージできないならC言語は触っちゃダメだ。 Javascript楽しいサービスを作ることに特化したほうがいい。

酷な言い方だが、適材適所だ。

それでも、Cに来るならがんばって、メモリー勉強をするしか無い。その時は みんな応援すると思うよ。

2013-05-25

http://anond.hatelabo.jp/20130525004515

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B3%E3%82%A2

ラック法則[2]を引用するまでもなくそれまで長い間予見されていたPCサーバー用のシングルCPUによる演算能力向上の限界1990年代末頃から現実のものとして認識されはじめ[3]、2000年代の中頃にはシングルコアでの処理性能の向上手法よりマルチコアによる向上を図った製品が登場するようになった。

あうあう。2000年代中頃ですね。

ごめんなさい。

2013-05-15

正しい歴史認識を共有する方法の開発を公共事業として行ってはどうか

■前提

 2カ国間で、歴史事実に対する認識が相違している状態

■要件

 死傷者を出すことなく、感情を挟まず、学術的に信用度の高い結果を完成させ、2カ国間で共有させること

■提案

 特定の時間軸を決定し、大規模な演算を行う、ウォーシミュレーションゲーム提供する

 ・ウォーシミュレーションの初期パラメータについては、双方が提示する該当時間の国力や世相を示す「証拠」を元に設定する

 ・「証拠」に対しては、「反証」を行うことができる。「反証」は証拠と論説によるものであり、「反証」された「証拠」は失効し、パラメータ化できない。

 ・「証拠」も「反証」も、第三者がその内容を判断し、有効無効を決定する。決定する際には、その決定要因、決定論拠を書き添える必要がある。

 ・「反証」されず有効判定された「証拠」は、必ず認めなければならない。

 ・これら初期パラメータを元に、設定された時間の国際情勢と判断基準を元に、プレイヤーたる2カ国以外をAI制御させ、ゲームとする。

 ・どちらの国のプレイヤーも、自国のみ操作可能である

 ・操作方法については、ゲームとして製造する際に詳細を決定する

■提案に至る経緯

 「正しい」とは主観であって、客観性がない。それは天動説が「正しい」とされた世界を経た、2013年に生きる全人類がもつ共通の認識である

 「事実」とは、過去に発生した事柄を指すものである

 よって、「正しい歴史認識」という言葉は、「事実を元にした歴史認識」と言うべきである

 これならば、我々は、共通認識を行いうる。

 現在、不幸にも我が日本国は、複数の国家から、「正しい歴史認識を持て」という謎の言葉を投げかけられており、相当に当惑している状態である

 ならば、事実を積み重ね手作り上げた仮想環境内で、当時の判断を追体験し、その当時の判断が狂気の沙汰だったのか、はたまた苦肉の策だったのか。もしくは必然だったのか。

 それらを互いに知ればよのでは、という考えである

 上記要件を満たすようなシステムの構築は、実に大規模なものとなり、そもそもハードウェアから着想を変えて開発する必要があるものと考える。

 よって、そのような機器が世に普及する手伝いとなるよう、これらを公共事業として開発し、半導体産業IT産業に公金を注入し、

 未来への投資としては如何だろうか。

2013-03-28

科学技術計算Python

科学者必要とするもの

必要ものの列挙

現存する解法

どの解法が科学者にとって役に立つのか?

コンパイラ言語:C, C++, Fortran, 等
スクリプト言語Matlab
他のスクリプト言語Scilab, Octave, Igor, R, IDL, 等
Python はどうなの?

2013-03-20

これもファッション

私は、流行りのSNSとやらをわりとぞんざいに使っているので、

誰かがフォローなりフレンド申請なりを飛ばしてきたら、

誰であろうと基本的には全て承認するようにしている。

そのせいかタイムライン上にいつの間にかへんちくりんな人間がいることも多い。

今日はその一例をここに記したいと思う。

彼はプログラミング精通しているようで、どうやら情報系の学校に通う学生らしい。

彼はよく、流行りらしい関数型言語Haskell?)やらアセンブル言語等の話題を取り上げ、

これがああなってこうで・・・等と、恐らく的確なのであろうコメントを発する。

記事の内容を見てもまるでサッパリであるからすると、

最近学生勉強熱心であり意識も高いのだな、と思わせるには十分であった。

私の職業プログラマーでもエンジニアでも無いが、

仕事をほんの少し楽にする為のこまいスクリプト程度なら書くこともある程度での知識を持つ人間である

そんな彼の観察を時偶に続けていたところ、

彼がとあるウェブ上のプログラミングコンテストに挑戦した、という旨の発言が目に入った。

いつも難しいアルゴリズム先進的なコーディングについて語る彼のことだから

さぞかし優秀な成績なのだろう、と期待してコンテストウェブサイトアクセスし、彼の固有名検索にかけた。




結果は、失笑に耐えぬものだった。




コンテストは4つの問題が出題される形式であり、それぞれ難度に差がつけられている。

1つは中学生でもコードの書き方さえ知っていれば解けるであろう問題。

1つはFizzBuzzを基本とし、それに些細な応用を付与した問題。

1つはエイトクイーン問題を少し改変した問題。

1つは前述のエイトクイーン問題から更に発展させた上で、高度な数学的思考を求める問題。

彼の結果は、初問正解のみであった。

提出されたコードは、会期を過ぎると誰でも閲覧が可能になる為、

彼のコードを覗いてみることにした私は、そこで更におかしな笑いがこみ上げた。

彼は、FizzBuzzがほぼ全く書けていなかった。

それどころか、基本的なループ処理や、型の扱いが出来ておらず、

素人の私から見ても、これがちんぷんかんぷんコードであることは一目瞭然であった。

以前、彼はHaskellの話題に言及する中で逆FizzBuzz問題についても述べていた気がする。

確かに、私もそんな事が要求される場面があれば悩むだろうな、とその記事を読み感想を覚えたが、

彼は逆FizzBuzzどころかFizzBuzzすらマトモに記述できないのである




コンパイラの違いによってコードの書き方はここまで変わる」

圏論が出来ないヤツは将来、プログラマーとしても技術者としても失格」

構造体同士の四則演算は全メンバに同一の演算子適用するのかな?」

彼は、一体何なのだ

2013-02-20

天然だとしたら貴重な物件

http://d.hatena.ne.jp/RepsolFireBlade/20130220/1361332690

それだけ、PHPって流行っている言語で、この問題も注目されているってことなのね。まあ、言語としてPerlよりはマシだと思うね。ってか私Perlいかも?しかPHPにも型がないところが嫌いなんだけど。

 世が世ならこの破壊力は大きかった。

C系の構文を採用する言語の中でPHPけが左結合などという非常識仕様採用している。そもそもCを真似して作ったのに、ここだけ「間違えて」実装しちゃったとしか思えない。で、それを後から仕様だ!」って言い張っているんだろうなぁ。大人げないねぇ。素直にバグだって認めれば良いのに。実装のバグじゃなくて仕様バグね。言語仕様として「三項演算は左結合です。」って言ってしまえば、その実装は正しい。私が言っているのは、仕様バグ。つまり仕様です、そう決まってます、と言っていること自体が間違っている。どう考えたっておかしいでしょ?

 普通、色々書けば書くほど説得力は増すのだけど、書けば書くほど説得力が抜けていく。

あっちこっちで、ネタにされていた中に「今さら言語仕様変えるなんて、後方互換性はどうなる?」なんてのがあったけど、そんな非常識プログラミング存在しないだろうから問題ないと思う。その前に、後方互換性って今や死語じゃない?

 C++11先生まじぱねーっす

いずれにしても、昔のプログラムを救うことを考えるより、今後も続々と増えるであろう「C系の言語から入ってくる人」を救うことを考えるべきだね。

 それじゃ、とりあえず読みやすソースコードを残して頂けると大変助かります

 このおっさんがすべき事は、このおっさんがどんなネストを書いてしまったのか、そのPseudo Codeを晒すこと、ただそれだけ。

2013-02-04

http://anond.hatelabo.jp/20130204113805

メタが理解できないってことじゃないの?

プログラマだって、for文で書くと分かるけどΣで書くと分からないとか言い出す人結構いるし、

行列演算プログラムは書けても、線形代数一般論言葉で書かれると全然からないという人も多い。

ポインタがわかったって、ポインタポインタポインタとか言われるとだんだんこんがらがってくるし、

よくわからんマニアックツリー構造が実装されているのを見ても、何がどうなって上手く動いてるのか

よくわからんということは普通にあるだろう。

http://anond.hatelabo.jp/20130203154719

今時のパソコンをいきなり与えられた人(普通はそうだけど)は、そもそもポインタなんて機能が何故必要なのか理解できないと思う。

JavaとかPerlとかVBとかは、扱いたいデータを直接切り貼りするだけでプログラムとして成立するし、それで十分なわけで。

そのレベルコンピュータの仕組みや、メモリの使い方を理解する必要性は、普通は全く感じられないからね。


それにポインタ意識しながらプログラミングするというのは、前述の演算必要データ構造に加えて、メモリ管理上のデータ構造も扱うという、2重のデータ構造を考えないといけない。

これはプログラム初心者には全く想像できない領域だし、そうそう簡単な事じゃないと思うわ。

ましてやC言語の*pとp[]の交換性が、基本環境依存データ型のバイト長をいちいち把握しながらポインタ演算してアクセスなんて面倒でしょうがいか結構必須とか、そもそもポインタ演算を使いこなせればハードリソースビット単位で搾り取れて、それをアセンブラよりはシンプルかつ抽象的に実装できるC言語は非常に効率がいいとか、まず理解不能でしょ。

そんなことが必要な分野が世の中にはあるという現実すら知らないだろうし。


尤もマイコンキットから入って「メモリデータをロードして、そのデータメモリ上の格納場所CPUから分かるように(ry」というアプローチなら、ポインタを使う以外に方法が無いので嫌でも覚えるだろうけど。

2013-02-01

http://anond.hatelabo.jp/20130201203804

そういうことではない。

小学校算数世界の「掛け算」は整数実数上の通常の意味での積とは異なる演算なんだよ。

整数×単位系」という空間上に定義された演算で、単位系の方に「単一単位からなる単位」(集合Aと書く)と、

「2単位の商単位」(集合Bと書く)が存在して、

A×B->Aという演算しか定義されていない(B×A->Aかもしらんがそこは知らない)のが小学校式。

もちろん、そんなしちめんどくさいことしなくても、単位系の代数構造が通常の数上の積演算構造に従うことを

説明すれば可換性も含めて自明なわけだが、小学校教師の8割くらいは(そのブログの奴と同じように)単純に馬鹿なので

その辺ろくに理解してないし、残りも、特に頭の悪い子に合わせるためにそうしているようだ。

そもそも、国民全員に格安提供される教育クオリティなんてそんなもんだろう

それが嫌な奴らは私立の小学校に行く。馬鹿と関わらないためには金がかかるわけだ…。

2013-01-23

http://anond.hatelabo.jp/20130123185826

頭が良くて高学歴なら、就職が決まらない段階で修士就職する程度の頭はあるからポスドク問題など引き起こさないだろ。

就職という自分未来演算する能力がなくて頭がいいとは言わないだろ。

勉強はできるのかもしれないが、就職できないのにドクターに上がるのは辞めろと普通教授に言われる。

 

みんな、博士取りたくても就職先がないから、修士であきらめて、就職してるんだよ。

博士号就職では、就職のほうが優先。

2013-01-12

http://anond.hatelabo.jp/20130112125334

ネタだと思うけど、1歳半の子供にその話はないわ。

小学校に上がる前から漢字の読み書き、四則演算を覚えさせようとする教育ママ並みの狂気が見える。

2012-12-20

そもそも「順序のある掛け算」は「自然数上の積」じゃないんだよね。N×N→Nの写像ではない。

これを定義するには、「単位」集合上の代数構造定義して、その部分集合としての「掛ける数」集合と「掛けられる数」集合を定義し、

それらとNとの直積集合上で定義された演算として「順序のある掛け算」を定義する必要がある。

そもそも異なる代数構造を同じものとみなすから矛盾が生じて混乱するんだよ。

何が言いたいかというと、算数を教えるのは教育学部卒のド文系には荷が重すぎるので、音楽先生みたいに別立てにした方がいいということ。

2012-12-06

http://anond.hatelabo.jp/20121206110753

脳内普通の人シミュレータインストールできたのは社会人になってからだな。

実装が甘いしあくまでソフトウェア実装で汎用演算器上で計算してるから、遅いし精度も悪いんだけど。

2012-11-01

はてブ1000Users超えアンテナ」に触発されてWebサービス作ってみた

ずっとWebサービスってのを作ってみたくて、

先日の「週6フリーターもWEBサービス作ってみました。」に触発されて、

自分も何か作れるんじゃないかと思って勢いで作ってみた

スペック

IT系サラリーマン別に仕事Webとかプログラムとかはやってない。IT系企業に務めているというだけ。

でもそれだとこの先が無さそうなので自分でも何か作れないかと思ってるところに、1000を作ってみた〜を読んで奮起。

会社エンジニアさんに「どんなの作るのが勉強になりますか」と相談したところ

「とりあえずそれ(1000Userアンテナ)と同じようなものを作ってみれば?」と投げやりに言われ、今に至る。

HTMLCSSJavascript

趣味で触ったことがあるレベル

以前に「HTMLWebサイトを作ろう!」みたいな本を読みながら、

何のプログラムも入っていないゲーム攻略サイトを作ったレベル。すぐ放置した模様。

上記の事を話したら、仕事で練習がてらに触らされる。四則演算ができる程度。

趣味

体幹トレーニング。活かす場は無い。

活かす場は無いが、情報収集は好きなのでそれをテーマにすることに。

作ったもの

カラダアンテナ

http://karada-antenna.com/


筋トレ系のはてブエントリを色々まとめて表示するサービスです。

普段RSSを使っていて一番イライラする「違うタグなのに同じ記事をいくつも拾ってきやがる」を解消したいのが目的

「なるべくAPIとかjQueryプラグインとかを使うようにしてみたら?」という神(社内エンジニアGさん)の発言により、無駄に色々使って見ることに。

使用した技術

1.Google Feed API

解説:RSSの取得と表示。Googleさまさまです。

参考サイト

Google Feed API →公式サイト

Google AJAX Feed APIの使い方メモ →ぐぐって最初に出てきたサイト。お世話になりました。

ただこれだと複数のRSSを読み込んだ時に、例によって例のごとく同じURLの記事が別のタグRSSからいくつも出てくる。

これを解消するにはRSSマージして重複するのを消せばいいらしい。

2.Yahoo pipes

解説:複数のRSSをまとめて、更に色々抜いたり加工したりしてくれるサービス

参考サイト

モジュールを繋げてマッシュアップ!「Yahoo! Pipes」の使い方

なんというかやりたいことが8割がた解決してしまった。

GoogleYahooが手を組むとこんなに凄いのかと関心。本当はもっと色々出来るらしい。


3.はてなブックマーク数を画像で取得

解説:そのままはてブUsers数を画像で取得してくれる

参考サイト

ブックマーク数を画像で取得する API の公開について



4.リンク元faviconを取得

記事のfaviconも出せないかな?と思ったらそれもはてブAPIと同じようなサービスがあるらしい。

参考サイト

リンク先のFaviconを取得・表示できるWebサービス(API)とJavaScript・プラグインまとめ

favicon (ファビコン) 画像変換サービス - Favicon Converter



5.SNSボタン

ソーシャルリンクボタンが欲しかったので、1000Users超えさんのところでも紹介されていたのをそのまま使う事に。

参考サイト

忍者ツールズ

GREEとかのボタンって使ってる人いるのでしょうか?



6.学習

最近はただでこんな動画が見れるサービスもあるんですね・・・エンジニアさんはほんとすごいです。

ドットインストール


公開までの準備

公開するにあたって色々用意したもの達。

minibird http://www.minibird.jp/

解説:サーバー

レンサバ探してたら何故かサーバーエンジニアSさんからここを進められた。

安かったし評判もぼちぼちなのでこだわりもなく決定。

名前ドットコム http://www.onamae.com/

解説:ドメイン取得サービス

Webサービスって言ったら独自ドメインだろ!ということで480円セールをやっていたので取ってみる。

名前ドットコムってGMOなんですね。

参考サイト

お名前ドットコムでminibird



広告をつける

せっかくなので広告もつけたくなったので調べてみた。

GoogleAdsenseって結構簡単に設置できるんですね。

Google Adosense

参考サイト

AdSenseアカデミー →Google先生の公式ガイド


Link Share

解説:iPhoneアプリリンクを貼れる。楽天がやってるんですね。

http://www.linkshare.ne.jp/

amazonソシエイツ

解説:書籍アフィリエイトAmazonさん。思ったより簡単でした。

https://affiliate.amazon.co.jp/

あと、スクロールしたらついてくるってのをやってみた。カッコいい。

参考サイト

jQuery – メニューをスクロールに付随させてみる



PR

せっかく作ったからにはPRしてみたい。

1.ツクログ

解説:作ったWebサービス投稿できるサイトアンテナサイト多いですな・・・

http://creaters.eightbit.jp/

2.つくったー

解説:Webサービスをつぶやいて宣伝してくれるWebサービス?ありがたいです。

http://inajob.no-ip.org:10080/tsukutter/

参考サイト

作ったwebサービスをPRできる!webサービスのリンク集サイトまとめ|ITキヲスク



最後

こんな感じのものを色々お借りしつつ作りました

正直全然面白いWebサービスではないのはわかってるのですが、

それでも非エンジニアでもそれっぽいものができるんだなあというのと、APIって凄いと思いました(小学生並みの感想

色々調べながら「あ、こういうWebサービスがあったらいいかも」というアイデアはいくつか浮かんだので、

こんどはそれを実現できるようにもっと勉強してみたいと思います

勉強なんて学生時代いらいなのでなんだかワクワクしてます

よかったらWebサービスをみてやってください!

カラダアンテナ http://karada-antenna.com/

2012-10-11

32Bit CPUで long long 活用して、ビット演算 しても速くなんねーよ。普通に32Bitレジスタ2本使えよ。

って 思っても良い?

2012-09-09

初等幾何ってどこまでが初等なの?

  • コンパスと定規だけで考えるのが初等幾何なんだよ
  • 四則演算と簡単な補助線が引ければ解ける問題が初等幾何なんだよ
  • 義務教育までの内容なら初等幾何なんだよ、三角関数使わないと解けないのは初等じゃないよ
  • はっきりしたことは言えないけどそれっぽいから初等幾何なんだよ

2012-08-13

C#基礎文法最速マスター

1. 基礎
classの作成

プログラムclass記述します。たとえばSampleという名前classを作る場合、Sample.csファイル内に次のように書きます。(C#場合ファイル名とクラス名は同一でなくても良い。複数のクラスを書いても良い)

public class Sample {

}
Mainメソッドの作成

プログラムclass内のMainメソッドの先頭から実行されます。Mainメソッドは次のように書きます

public class Sample {

    public static void Main( String[] args ) {
         // 処理を書く
     }

}
Console.WriteLineメソッド

文字列を表字するメソッドです。

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;

以下は参照型のデータ型です。

// StringString s;
// 配列String[] array;
プログラムのコンパイル

プログラムコンパイルするには、コマンドラインで以下のようにします。

csc Sample.cs
プログラムの実行

プログラムを実行するには、コマンドラインで以下のようにします。

.net framework on Windows場合

Sample.exe

Mono.frameworkの場合

mono ./Sample.exe
2. 数値
数値の表現

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;
3. 文字列
文字列の表現

文字列ダブルクォートで囲みます

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が返る
4. 配列
配列変数の宣言

配列です。

// 配列の宣言
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);
5. 制御文
if文

if文です。

if ( 条件 )
{

}
if ~ else文

if ~ else文です。

if ( 条件 )
{

}
else
{

}
if ~ else if 文

if ~ else if文です。

if ( 条件 )
{

}
else if ( 条件 )
{

}
while文

while文です。

int i = 0;
while ( i < 5 )
{
    
    // 処理
    
    ++i;
}
for文

for文です。

for ( int i = 0; i < 5; ++i )
{
    // 処理
}
for-each文

for-each文です。配列の各要素を処理できます

int[] fields = new int[] { 1, 2, 3 };

foreach (int field in fields)
{
    // 処理
}
6. メソッド

C#では関数メソッドと言いますメソッドを作るには次のようにします。戻り値を返却するにはreturn文を使います

static int sum( int num1, int num2 )
{
    int total;

    total = num1 + num2;

    return total;
}
9. ファイル入出力

ファイル入出力です。ファイル入出力を行うには、プログラムの先頭に以下を記述します。

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" );

例外処理をするにはtrycatch文を使用します。

try {

    // 例外が発生する可能性のある処理

} catch ( Exception e ) {

    // 例外発生時の処理

}

2012-06-15

http://anond.hatelabo.jp/20120614121920

ポインタ、参照(リファレンス)、束縛(バインディング)、それぞれ似てるけど同様に語ると混乱の元ではないかと。

 

ポインタメモリアドレスに型情報をくっつけたもの。加減算できる点が特徴で、それはメモリアドレス概念由来だろう。

変数というメモリ上の記憶域を指すフィジカルに近い概念で、配列運用(*p++で回すとか)、引数の参照渡し(コピー抑止、複数戻り値の実現)、メモリのもの管理malloc)あたりで、基本手作業による最適化のための仕組みという側面が近いと思う。

 

perlだと、変数はやっぱり記憶域ではあるけれど概念として一段抽象化されていて、メモリという連続した領域じゃなく独立した領域の集合となっているから、リファレンスの加減算はなし。

また、配列も単なるメモリの並びからより抽象化してリストもできたから、配列運用や複数戻り値リストがあるのでリファレンスに頼ることはなくなる。

ただ、オブジェクト概念があって、オブジェクトオブジェクトとして入れる変数は用意せずリファレンスとすることで、文法上の変数の型を増やさない、コピー時のコンストラクタの問題を回避するなどのほか、オブジェクト概念を援用して無名関数無名変数ファイルハンドルなども変数引数として扱えるようにした。

 

で、pythonはもう一段推し進めて、今までの数値や文字、配列オブジェクトとみなし、変数はすべてオブジェクトを指し示すもので、記憶域は変数としてあるのではなくオブジェクトとしてあり、変数リファレンスという特別なものがあるのではなくなり、変数記憶域をもっていて値が代入されるものではなく、既にあるオブジェクト変数名という名前(ラベル)を付けて束縛する行為とされる。

見方を変えると変数はすべてにおいてリファレンスで、代入とは値そのものの代入でなく値へのリファレンスの代入で、引数も参照渡しであるが、引数に代入したところでリファレンスが変わるだけで元の値が変わるわけではなく、しかし他の演算などでは自動的にデリファレンスされており、単純な数値や文字列など、自身を変更する機構を持たない(できない)ものにとっては実質的に今までとの違いはないに等しい。隠ぺいといえば隠ぺいか

java, javascript, rubyもおおむねこの考え方でよかったと思う。

ただ、phpは若干両者が混じったところがあって微妙なところがある。

 

参考

2012-04-18

不定形の極限を分かりやすく説明するには?

レスが色々ついて楽しいエントリでした。

基本的には前項の内容に関する指摘・修正等はトラックバックでしていただいた通りです。

少しマイルドな形でトラックバックを利用させていただき、また元の疑問に対して再提示しましょう。

(原文については、同日で検索いただければでてきます。)

代数的な意味での「無限大」、極限で用いる「無限大」、複素関数意味での「無限大」は異なる。

無限大、という言葉は様々な定義、文脈上で発生する一概念であり、ひとまとめに語ることはできない。

・∞ - ∞ ≠ 0、という表現存在する

→ 様々な観点でとらえらることができるが、∞は四則演算可能な数とは考えないのが無難

  四則演算可能とする立場でも、通常の四則演算則は成立しないことが分かっているため、

  高校の間では考えないのが良い。

  高校の間でこの表現に触れるのは微分だけであり、そこなら触れなくても大丈夫

  どうしても触れたい場合は、解析で用いるε-δ論法の軽い解説をするのが良いです。

以上を踏まえて、今回のテーマ不定形の極限について。

不定形の極限について

 不定形の極限という表現のものが(便利ではあるが)危険なので、使用しない。

代数としての無限大と、極限値としての無限大との混同の怖れがあるため。

 (受験期にこれを混同することがそれほど問題とは思えないのですが、とはいえ生徒の今後の混乱を招く可能性もあります。)

 次のような表現、説明とする。

極限値として、"無限大に発散"する関数同士の加法

極限値として、"無限大に発散"する関数同士の除法

極限値として、"無限小の冪乗"の"無限大の冪乗"

 および、"無限大の冪乗"の"無限小の冪乗"

・・・

ここまで書いて、

極限値として、"無限大に発散"する関数同士の加法

がナゼ無限大にならないことがあるかを説明するには、

数列同士の差が完備性を持っていることについて=コーシー数列についての説明をしないといけないことに気付きまして。

うーん、説明に2時間くらいかかりそうですね。

この3つの条件について、「数学が苦手な生徒に」「分かりやすく」説明するプランを何か考えないといけないですね。

・暫定として

極限値として、"無限大に発散"する関数同士の加法

 数列Anと数列Bnの差を取る時、nがある一定以上の値とする。以降、δAn>δBnならば、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/∞)は同様の理由で、その結果を私達が知ることはできません。この形式を、不定形の極限と言います。神ならぬ私達では、その結果は知りえないのです。

は極限の話で、「∞」を含んだ四則演算とは別の話。

神ならぬ身では・・・∞-∞が0にならない理由

http://kanasoku.blog82.fc2.com/blog-entry-22498.html

66 以下、名無しにかわりましてVIPがお送りします :2011/11/08(火) 23:44:28.30 ID:PjCFZfxU0

無限無限=0になぜならないか

理由を聞いても理解できない

塾でもよく訊かれるので解説を。

無限(+∞)というのは、「私達が理解できないくらい大きい数」ということを表す記号です。

∞ + ∞ = ∞ と定義します。私達が理解できないくらい大きな数を加えあっても、それが理解できないくらい大きいことに変わりはありません。

なぜ、∞ + ∞ = 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/∞)は同様の理由で、その結果を私達が知ることはできません。この形式を、不定形の極限と言います。神ならぬ私達では、その結果は知りえないのです。

ログイン ユーザー登録
ようこそ ゲスト さん