はてなキーワード: 浮動小数とは
プログラムは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 ) { // 例外発生時の処理 }
ブログに書くと、一発で仕事バレするようなニッチなネタなのでここにメモっとく。
http://www.atmarkit.co.jp/fsys/zunouhoudan/091zunou/xmos_cpu.html
ここではボロカスに書かれていたが、やっと安い評価キットが出はじめた。
http://www.csp-consortium.org/apps/XMOS_training_kit%282010-08%29.pdf
ニコニコ技術部あたりが食いつきそうなネタではあるものの、今の所ニコ動でXMOSで検索しても1本も出てこない。
デジキーですぐ買える。チップ1000円~3000円。小規模な評価キット2万~3万ぐらい。
ちなみに総産研にXMOSという名前を使った特殊なMOSトランジスタの研究発表があるが、それとは全く別物。
特徴:
普通にC言語でも使えるらしいが、チップの特徴を活かすためにはXC言語という専用の言語を使う。
昔、トランスピューターをやってた人達が作った。なので、XCの実態はトランスピューター用言語とC言語を混ぜたような感じ。
・小規模な組み込み向けの用途において、安価なチップで、並列処理とかイベントドリブンな処理が可能、という点が画期的。並列処理は大規模コンピューティングだけのものじゃないよ!という熱いメッセージ。
・ハードウエアの動作をソフトでエミュレーションする処理は、いわゆる「ワンチップマイコン」よりは得意&楽。
・XCは言語仕様としてポインタが削除されてる(!)。XCをC言語の派生言語と呼んでいいのか迷う所。
・XCは、昔のトランスピュータを勉強した経験がある人じゃないと、上手には使いこなせないクセモノ。いい感じにガラパゴス化しとる。
・大容量のメモリをつなぐことを想定した専用ハードを持ってないので、自ずと用途は限られる。(DRAMのI/Fをエミュレータでやれ、なんて言われても絶対嫌だ。)
・XCの言語仕様は、「木に竹を接いだ」ような状態で、お世辞にも美しいとは言えない。ソースコード眺めてるだけでムカつく。(将来的に改善される可能性はある)
・「チャネル」というのが1つのキモだが、この帯域幅が今時のチップとしてはしょぼい。ただしこの欠点は大量のチップを並列に使えば、理論上はある程度補うことが可能らしい。
・MMUを持たないので、Linuxを移植できないのか、と言われるとツラい。
XMOS応用例 Youtubeでもやっと数千再生しか行ってない。
http://www.youtube.com/watch?v=4gbFagvjSfU
http://www.youtube.com/watch?v=eLyn2Ghq_oE
http://www.youtube.com/watch?v=atAdpt5SZe8
今、XCとXMOSに取り組めば、あっという間に国内のこの界隈では有名人になれるかもしれない。強いて言うならそこが唯一の魅力。
370 :いつでもどこでも名無しさん:2010/06/27(日) 19:38:58 ID:PlgKck4N0
Jave SE for Embedded をダウンロードして libjvm.so を Netwalker に
ぶち込んだら Java が爆速になった。V2C もサクサク。
371 :いつでもどこでも名無しさん:2010/06/28(月) 00:25:33 ID:???0
やはりsunのに俺もしようかな
期限切れたらどうなるんだろう
372 :いつでもどこでも名無しさん:2010/06/29(火) 22:44:20 ID:???0
すげー
俺も試してみる。
感謝。
373 :いつでもどこでも名無しさん:2010/06/30(水) 03:53:05 ID:???0
浮動小数点ありなしどっちいれた?
374 :いつでもどこでも名無しさん:2010/06/30(水) 05:17:35 ID:qkrrzTC90
ARMv6 の Headful。
ほかは試してない。
C++において多倍長整数,多倍長浮動小数点を扱うライブラリとしてGMPが有名だ.
Visual C++を使っているのなら,GMPと互換のあるMPIRが導入しやすくて良い.
以下,VC10 (Visual Studio 2010)環境での話.
このMPIRはどうもC++の複素数クラスstd::complexと相性が悪いようだ.
#include <complex> #include <iostream> #include <iomanip> #include <mpirxx.h> int main() { std::complex<mpf_class> a(1.0, 2.0); std::complex<mpf_class> b(0.0, 1.0); std::complex<mpf_class> c1 = a + b; std::complex<mpf_class> c2 = a - b; std::complex<mpf_class> c3 = a * b; // std::complex<mpf_class> c4 = a / b; // error std::cout << "a =" << a << std::endl << "b =" << b << std::endl << "c1 =" << c1 << std::endl << "c2 =" << c2 << std::endl << "c3 =" << c3 << std::endl; // std::cout << "c4 =" << c4 << std::endl; return 0; }
「operator/=」から呼び出される「_Div」内部でエラーが出る.
そこでテンプレートの特殊化をする.
#pragma once #include <mpirxx.h> #if defined(_MSC_VER) &amp;&amp; (_MSC_VER == 1500) /* VC9 (Visual Studio 2008) */ #pragma comment(lib, "C:\\lib\\MPIR\\vc9\\mpirxx.lib") #pragma comment(lib, "C:\\lib\\MPIR\\vc9\\mpir.lib") #else if defined(_MSC_VER) &amp;&amp; (_MSC_VER == 1600) /* VC10 (Visual Studio 2010) */ #pragma comment(lib, "C:\\lib\\MPIR\\vc10\\mpirxx.lib") #pragma comment(lib, "C:\\lib\\MPIR\\vc10\\mpir.lib") #endif #include<complex> namespace std { template<> complex<mpf_class>&amp; complex<mpf_class>::operator/=(const complex<mpf_class>&amp; _Right) { // divide by other complex //this->_Div(_Right); mpf_class _Rightreal = (mpf_class)_Right.real(); mpf_class _Rightimag = (mpf_class)_Right.imag(); mpf_class bunbo = _Rightreal * _Rightreal + _Rightimag * _Rightimag; mpf_class re = ( this->real() * _Rightreal + this->imag() * _Rightimag ) / bunbo; mpf_class im = ( this->imag() * _Rightreal - this->real() * _Rightimag ) / bunbo; this->real(re); this->imag(im); return (*this); } }
これでとりあえずは割り算もできるようになった.
計算精度については何も考えていない.
#突っ込みお待ちしてます.
長崎大学が開発したコンピューターは、まともに開発したら数百億円もかかるような代物だったのかということ。元の記事を読むとそういう風にしか読めないように書いてるけど、そうじゃなくて、「数百億円」というのは事業仕分けで言ってる「スパコン」のことなんでしょう?
いや、普通に開発したら数百億するようなものですよ。
地球シミュレータ2と比較しているでしょう?
あれは、122TFLOPS(テラフロップス:1秒間に1兆回の浮動小数点演算性能)とか言っているけれど、その前身のシステムで600億を投じています。
そして、今回はそれを越えたと発表したんです。
もちろん、演算性能だけを比較しているので、一概に同じ土俵とは言えないけれど。