2012年2月22日水曜日

裏テーマ

僕が今書いている自費出版用の書籍の裏テーマは
問題をプログラミングで解く。と
数式の解の近似値を得る。です

人には様々な問題がある
社会にも様々な問題がある
それをプログラミングを利用して解こう
そういうテーマです
今書いているやつには
人の問題、社会の問題を解くようなプログラミング例は
思いついていないので書けませんが
プログラミングで解けることは
数学的な問題や
物理的な問題だけじゃないと思うんです
それを書籍を書くことを通して
道筋をつけたい
そういうテーマです
なので今やってるルートの計算なんて
(それが終われば2乗である数になる近似値だけじゃなく
 X乗(まずはXは整数)すればある数になる近似値を解くプログラムを書きたいです)
ググれば出てきそうですが
あえて自力で解こうと思っています

数式の近似値を得る。というテーマは
数式の解を解くって難しいんですよ
3次式の解を求める解の公式とか
やたらややこしいんですよ
でもそれは近似値ならば少数として
より把握しやすい値になるかもしれない
正確な解ってややこしいし
解き方も難しいし
なのでコンピューターの力で
強引に近似値を得てしまおう
書籍に載っているやり方を応用して
式の解を強引に得て欲しい
そういう道の道筋をつけたい
そういうテーマです

2012年2月17日金曜日

とりあえず

とりあえず、ルートを求める処理は出来てます
少々の改良と
(改良ってかスクリプトのサブルーチン化で呼び出せるように。です)
コメント書くのとサブルーチンの名前のリファクタリングが
TODOとして残ってるんですが
中途半端でも載せれば、眺めながらやる気出るかもしれないので
載せときますw

追記:一応、スクリプト完成したので削除w

2012年2月16日木曜日

自費出版を目指すブログ

TACKは数学っぽい経済学っぽいプログラミングっぽい書籍を自費出版するのが夢です
数学と経済学とプログラムを足して3で割ったような書籍です
あんまり言ってないんですが(笑)僕の夢は作家になることです
作家は何冊も書かなければ作家とは言えなく
文章を書くことは好きですが、作家になれるほど大量に書いている訳でもなく(笑)

インタプリタ/コンパイラの作成を目指すブログ で
このネタ書籍で使えるかも?と思ったネタを書いたので
それを機にGOOGLEのブログに投稿しながら執筆していこうかな?
と、考えるに至りました

はてなの方が見てくれそうですが
GOOGLEのブログはアフィリエイト?が使えるみたいなんで
収入になるかもしれないし
こっちで書くことにしました

幾つか寝かせてあるネタもあるので
ブログに投稿しながら
それをマイルストーンとして
ある程度の分量になるまで執筆して
そしたら自費出版しようと思いました

大学でゼミの頃、空想していた概念をまとめて自費出版する!というのは作家を目指す上での最初の僕の夢です!
最初は卒論にしようと思いましたがまだ構想があやふやで、実行するのに踏み切れませんでした
あれから10年経つんだなぁ
大分形になって来ましたが
手を伸ばせば、遠ざかり
手を離そうとすると、近づいて来るようで
難しいですね
そろそろ概念をきちんと文章にすることを決意しようかな?と考えているところです
なんか理想の人みたいな概念みたい
手を伸ばせば、遠ざかり
手を離そうとすると、近づいて来るようで

自費出版したら絶版になるまで
書いた記事は削除する予定です

文章をよりよくするためのコメントもお待ちしています

2012年2月6日月曜日

BIGFloat

先日ルートを計算するPerlスクリプトを書いていて
Perlのdoubleの有効桁数は何桁だったかな?と思ってググったら
PerlにはBIGFloatがあるみたいですw
ルートの計算の後で桁の大きい少数を扱うスクリプトを書こうと思ってましたw

あろうがなかろうが自力で処理を書いてもいいんですけど
めんどくさいしwバグが怖いので
素直にBIGFloat使う予定です

ルートの計算は大筋完成していて
後は整理してコメント書いて完成です

#最近、コメント書くのめんどくさいw

2012年2月3日金曜日

上限と下限の条件分岐

rootの計算はdoubleを使ってるので
ものすごい大きい数から
ものすごい小さい数まで計算できるので
いらないかもしれませんが
一応、考え方として
どれくらい大きい数から
どれくらい小さい数まで計算できるか
決めておいた方がいいですよね

とりあえず、最大1e+300
最小1e-300まで計算できるように決めました
決めるったら決めるw

でそんなのを求めるスクリプトです

追記:doubleの下限は300桁ちょいくらいなので
doubleの桁数も考え最小1e-285に変更しました
use strict;
use warnings;

printf &mul_10_X_count(0)."\n";
printf &mul_10_X_count(3)."\n";
printf &mul_10_300_count()."\n";
printf &mul_10_300_count()*&mul_0p1_X_count(300)."\n";
printf &mul_0p1_X_count(0)."\n";
printf &mul_0p1_X_count(3)."\n";
printf &mul_0p1_285_count()."\n";
printf &mul_0p1_285_count()*&mul_10_X_count(285)."\n";

# 10の引数A乗の数を返す
sub mul_10_X_count{
my $x=1.0;
my $i=$_[0];
$i--;
for(0..$i){
$x*=10;
}
return $x;
}
# 10の300乗の数を返す
sub mul_10_300_count{
return &mul_10_X_count(300);
}

# 0.1の引数A乗の数を返す
sub mul_0p1_X_count{
my $x=1.0;
my $i=$_[0];
$i--;
for(0..$i){
$x/=10;
}
return $x;
}
# 0.1の285乗の数を返す
sub mul_0p1_285_count{
return &mul_0p1_X_count(285);
}