トップ «前の日記(15-July-2014) 最新 次の日記(17-July-2014)» 編集

つれづれなるままに

これまでの訪問者人
本日の訪問者人  昨日の訪問者人
月齢20.4

AI | AIきりたん | Ast | Beat Saber | CeVIO | Cn | cover | de | Emacs | En | Es | fr | git | html | iPad | It | Just Dance | misc | MMD | MV | NEUTRINO | OVA | PC | PV | Ru | SF | SKK | stable diffusion | SynthesizerV | tDiary | Th | Vocaloid | VRC | VRChat MMD | Vsinger | Vtuber | was | YuNi | お茶 | アニメ | アメリカ | イラスト | オカリナ | カゲプロ | キズナアイ | テレビ | ノベル | ノーベル賞 | ビートセイバー | フィートセイバー | フランス | ラズパイ | ラノベ | 万葉語 | 世界 | 中国 | 予定 | 即売会 | 台湾 | 台風 | 合成してみた | 同人 | 地震 | 宇宙 | 家電 | 展示 | 描いてみた | 政治 | 旅行 | 日記 | 映画 | 時事 | 書道 | 歌ってみた | 歴史 | 海外 | 演奏してみた | 漫画 | 特撮 | 科学 | 英国 | 訃報 | 語学 | 踊ってみた | 陶笛 | 障害 | 音楽 | 飲み |

16-July-2014 なんだっけ? [長年日記]

_ [日記] カウンター

207人でした。

_ [海外][漫画][PC] 中国嫁日記

もうすぐ中国嫁日記の中国語版が出るらしいのですが、ジンさんもこれを出せるのかなんか心配な感じ。

色々と締め付けが厳しくなってきていますから。

あちらの知識人はVPNとかでGreat Fire Wallを抜けるということを常用してるようですが、途中経路をふさがれることはないのかなぁ?

通常のネットを経由しないでトンネリングしてるんだろうか?

どっかの団体が、衛星経由でどこからでも無線でネットに接続する方式を考えてると聞いたことがありますが、中国の内部でそれをやってるとは思えないからなぁ。

何らかのサーバーを踏み台にして接続してるのかなぁ?

そこらへんは詳しくないからわからないです。

特定のプロトコルをブロックするためにポートを閉じるというのはよくやるセキュリティー技術ですけど、他のポート番号(例えばwwwのポートなど)を経由することを回避するというのもsshでは普通ですよね。

ふみゅ?

_ [時事] 九州南部で梅雨明け

今年は梅雨入りしたのはなしくずし的だったのですが、梅雨明けは段階的なのかなぁ。

まもなく梅雨明けだという話もありますが。

雨の日もこのところは少ないですからねぇ。

_ [日記] 忍者女子高生

mixiニュースにあったのですが、見てみました。

いつまでこの動画が残っているかわかりませんが。

女子高生がふざけ合ってるうちに、なんかアクロバティックな動作をしはじめて、あげくのはてには高い建物から飛び下りたり忍術を使ったりして追いかけっこをするというやつ。

サントリーのC.C.レモンのCMでした。

宣伝だから、ずっと置いてあるわけではないでしょうね。

_ [PC] 丸め誤差

どうにも、Fortranでコーディングしてあったコードを最近の言語に移植したときに結果が合わないというのを聞いたのですけど、もしかして表現上の誤差なんでしょうか。

最近の言語は大抵IEEE754の規格に従ってるんですけど、Fortranは実装によってどう処理してるか違うんですよね。

それでも24桁全部使うと、計算式を完全に一致させれば例えばExcelの計算結果とほぼ一致します。(保証されているのは符号を含めて16桁まで。)

C#の入門書を読んでいたんですけど、倍精度の浮動小数点の変数の値を印字するとこの16桁の精度内でしか表示されないらしいんです。

さっきも言ったようにFortranでは実装によって違うと思いますが、指数形式でなく表示すると、22桁分まで数字がつまって表示されます。この22桁全部を使えば、まぁ、大体は16桁までは合うと。

もちろん、オーダーの違う数値同士の差を取ったりすれば、どんどん桁落ちがするので、そこは通常はアルゴリズムでカバーするのが数値計算のセオリーですね。

例えば、$p_1, p_2 \ll 1 $のときに $ 1- (1-p_1)(1-p_2) $とか計算すると、普通は結果は0になってしまいます。(電卓で確認してみるとわかります。)

これを回避するためには $ p_1 + p_2 - p_1 p_2 $ とすればよかったりします。

まぁ、展開してみれば自明ですが、この演算をくりかえすことで、例えば $ 1 - (1-p)^n $ とかも計算できるわけですね。

最近の言語では、むしろアルゴリズムの工夫よりも桁落ちの起きにくい表現でこれを回避しようとするみたいです。単純には有効桁数を増やせばいいわけで、例えばJavaとかでは10進表現での浮動小数点処理することで丸め誤差を少なくするようです。(これもIEEE754で規定されてるみたいです。)

C#でもdecimalという10進表現を持ってるみたいですけど、これはIEEE754とは互換性がないとのことです。(参考書がもしかして古かったらすみません。)

コンピュータ内では数値は2進数で表現されているのですけど、計算方法を工夫してこれを10進数で表すようにしてるというわけです。

単純に言えば、4bitでは 0000 ~ 1111 つまり0x0~0xFで15まで数えることができます。(0xA = 10で、アルファベットで順番に0xF = 15まで当てはめています。)

これを、例えば 0000 ~ 1001 で打ち切ってしまうと4bitで1~10になります。次の桁を別の4bitで表現すれば、データ量は増えることになりますが10進数で表現できたことになります。これはBCD (Binarry Coded Decimal)というやつです。(ちなみにこのBCDと互換性を持たせてアルファベットまで表現できるようにしたEBCD(エビスデック)というのもありますが、これはいわゆるASCIIとは別の表現となっています。昔の大型コンピューターで使われていました。)

現在の言語ではさすがにBCDだとデータ量が多くなってしまうので、色々と圧縮して使うらしいですが。

丸め誤差とか数値計算まわりはかなり奥が深いのですけど、コードを再利用することの方が多い立場としてはあまり深入りしたことがないです。本当はちゃんと知らないといけないんですけど。まぁ、この数値演算関連のコードの再利用ができることもFortranが生き残っている理由のひとつであるわけなんですが。(あとは、ベクター方の処理装置では最適化が楽にできる、というか昔はFortranでしかできなかったらしいです。今はCPU自体が速くなったので、通常はあまり気にしないところですが、繰り返し演算が多い科学技術演算では、しばしば大問題になります。何日も計算機を回すというやつですね。)

難しいです。

ううみゅ。


【PR】ブログへ記事を投稿して報酬ゲット!アフィリエイトのA8.net