したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

1みみず★:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。

2470774さん:2010/07/21(水) 17:42:55
>listにデータ操作を加えた後は、それ以前に取得したイテレータの動作は保証
>されないと思います。
>例えば、ソートや、データの追加、削除を行った場合。
-----
一番困るのが、仕様に書かれていないということだ。
ちゃんと、保証しなければならないor保証しなくても良いと書いておくべきだ。
勿論、書いてあるかすら確認していないので変なことを俺は言っているかもしれない。
上が正しいならば、走査しながらの削除が出来ないとは困ったものだ。

2471774さん:2010/07/21(水) 17:44:12
STLはそういうことはremove_ifを使ってやれと言っているのだろうか。
分からんでもないが・・・
俺が書こうとしているソースを考えると、かなり意味論的におかしい。
実行は出来るが。

2472774さん:2010/07/21(水) 17:44:41
まあ、こっちの方がメモリを食わなくてうれしいかもしれない

2473774さん:2010/07/22(木) 03:09:06
俺はなんとアホなんだ。
自分の要求を満たすlistを作ればいいじゃないか。

2474774さん:2010/07/22(木) 03:35:38
駄目だ。
仕様がデカすぎで面倒。

2475774さん:2010/07/22(木) 05:52:15
WinGDI遅すぎ。

2476774さん:2010/07/22(木) 23:46:43
何かやらかしたいなと思うのだが、やっぱり先人には敵わない。
俺はただの凡人だなあと思う限りである。

2477774さん:2010/07/23(金) 00:14:14
Greasemonkey Script : ニコニコ動画に拡張マイリストを追加するGreasemonkeyスクリプト - 棚からパルチャギ
http://castor.s26.xrea.com/products/greasemonkey/nicovideo_additional_mylist.html
-----
のSeaHorse版が全く更新されていない。
まあ、人口が少ないので仕方ないだろう。俺も最近RSSリーダーになっているし。
早くIE9出ろ。
アレで、ようやくFx2辺りに並ぶ。

2478774さん:2010/07/23(金) 01:09:23
JS+Javaで作りたくなった。
徹夜で作ってみせる!
まあ、Javaは初めてなので、上手くいかなさそう。

2479774さん:2010/07/23(金) 01:20:55
いきなり頓挫しそうだぜ!
取り敢えず明日の朝食を食うために、寝たほうがいいかなあ

2480774さん:2010/07/23(金) 01:40:52
有限不実行、これが俺。
駄目駄目だなあ・・・

2481774さん:2010/07/23(金) 01:41:15
まあ、ゆっくりやろう。
今日はまだ二十二時間あるのだ。

2482774さん:2010/07/23(金) 10:18:32
正直、Sleipnirなんてどうでもいいので、適当にGoogle Chromeのプラグインでも作ってみたいが、ちょっと他にやりたいことが出来たのでそれをやる。

2483774さん:2010/07/23(金) 10:28:28
#include <iostream>
#include <windows.h>

#define nullptr NULL

//関数
auto WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)->int;
auto CleanMessage(int *ret)->bool;
auto CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)->LRESULT;

//実装
auto WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)->int{
WNDCLASSEX wc = {sizeof(wc)};
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = MainWndProc;
wc.cbWndExtra = 0;
wc.cbClsExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(nullptr, IDI_WINLOGO);
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1);
wc.lpszMenuName = nullptr;
wc.lpszClassName = TEXT("AA");
wc.hIconSm = nullptr;

ATOM aWnd = RegisterClassEx(&wc);
if(aWnd == INVALID_ATOM){
return -1;
}

//ウィンドウの大きさの計算 横:600 縦;300
const int clientwidth = 800;
const int clientheight = 600;
const int screenx = GetSystemMetrics(SM_CXSCREEN);
const int screeny = GetSystemMetrics(SM_CYSCREEN);

RECT windowRect;
windowRect.left = screenx / 2 - clientwidth / 2;
windowRect.right = screenx / 2 + clientwidth / 2;
windowRect.top = screeny / 2 - clientheight / 2;
windowRect.bottom = screeny / 2 + clientheight / 2;

AdjustWindowRectEx(&windowRect, WS_CAPTION | WS_SYSMENU, FALSE, 0);

HWND hWnd = CreateWindowEx(
0,
reinterpret_cast<LPCTSTR>(aWnd),
TEXT("WindowTitle!!"),
WS_CAPTION | WS_SYSMENU,
windowRect.left, windowRect.top,
windowRect.right - windowRect.left, windowRect.bottom - windowRect.top,
nullptr,
nullptr,
hInstance,
nullptr
);
if(hWnd == nullptr){
return -2;
}

ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);


static const DWORD waitTimes[] = {
16, 17, 17
};
int index = 0;
int retValue;
HDC hdcWin = GetDC(hWnd);
HDC hdcMem = CreateCompatibleDC(hdcWin);
HBITMAP hBitmapMem = CreateCompatibleBitmap(hdcWin, clientwidth, clientheight);
SelectObject(hdcMem, hBitmapMem);
DWORD old = timeGetTime();
int i = 0;

timeBeginPeriod(1);
for(;;){
if(CleanMessage(&retValue)){
break;
}

//ただただ面倒臭い処理
{
RECT rc;
rc.left = 0;
rc.right = clientwidth;
rc.top = 0;
rc.bottom = clientheight;
FillRect(hdcMem, &rc, reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)));
int j = 0;

BitBlt(hdcWin, 0, 0, clientwidth, clientheight, hdcMem, 0, 0, SRCCOPY);
}

std::cout << timeGetTime() - old << std::endl;

if(CleanMessage(&retValue)){
break;
}

2484774さん:2010/07/23(金) 10:28:39

//時間処理
{
DWORD now = timeGetTime();
DWORD diff = now - old;
if(diff < waitTimes[index]){
DWORD sleeptime = waitTimes[index] - diff;
if(sleeptime >= 5){
Sleep(sleeptime - 3);
}
while(timeGetTime() - old < waitTimes[index]);
}
old = timeGetTime();
if(++index >= sizeof(waitTimes) / sizeof(waitTimes[0])){
index -= sizeof(waitTimes) / sizeof(waitTimes[0]);
}
}
}
timeEndPeriod(1);

DeleteObject(hBitmapMem);
DeleteObject(hdcMem);
ReleaseDC(hWnd, hdcWin);

return retValue;
}

auto CleanMessage(int *ret)->bool{
MSG msg;
bool flag = false;
while(PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)){
if(msg.message != WM_QUIT){
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
*ret = msg.wParam;
flag = true;
}
}
return flag;
}

auto CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)->LRESULT{
switch(msg){
case WM_DESTROY:{
PostQuitMessage(0);
break;
}

default:{
return DefWindowProc(hWnd, msg, wp, lp);
}
}

return 0;
}

2485774さん:2010/07/23(金) 11:09:32
SDLが通らない。
調べたサイトの対策を講じてみても動かない。
SDLを自分でコンパイルしろということですね分かります。

2486774さん:2010/07/23(金) 11:11:30
シェルスクリプト入ってねーよwwww

2487774さん:2010/07/23(金) 11:23:11
あれ、普通に-lmingw32で通った。
さっきは通らなかった気がするのに・・・

2488774さん:2010/07/23(金) 11:29:24
37行程度のソースを一回で通せないとは・・・

2489774さん:2010/07/23(金) 11:34:27
俺が外出している間に勝手にSDL_imageがコンパイル出来てないかな?

2490774さん:2010/07/23(金) 14:20:19
勿論出来ているはずもなく。
makeが上手くいかない・・・

2491774さん:2010/07/23(金) 14:22:40
Cygwinは入れたくない。

2492774さん:2010/07/23(金) 14:57:24
普通にVC用のlibいれたら行けた。なんぞそれ。

2493774さん:2010/07/23(金) 15:40:42
#include <iostream>
#include <list>
#include <memory>
#include <algorithm>
#include <random>
#include <ctime>
#include <cmath>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

#define nullptr NULL

class IShot{
public:
virtual bool Move() = 0;
virtual void Show(SDL_Surface *screen, SDL_Surface *image) = 0;
virtual bool HitTest() = 0;
};

class CShotLine : public IShot{
public:
virtual bool Move(){
m_x += m_v * std::sin(m_rad);
m_y += m_v * std::cos(m_rad);
if(m_x < 0 || m_x > 600 || m_y < 0 || m_y > 300){
return false;
}
return true;
}
virtual void Show(SDL_Surface *screen, SDL_Surface *image){
SDL_Rect rc;
rc.x = m_x;
rc.y = m_y;
SDL_BlitSurface(image, nullptr, screen, &rc);
}
virtual bool HitTest(){
return false;
}

CShotLine(int x, int y, int v, double rad)
: m_x(x), m_y(y), m_v(v), m_rad(rad)
{}

private:
double m_x, m_y;
int m_v;
double m_rad;
};

//関数
int main(int argc, char **argv){
if(SDL_Init(SDL_INIT_VIDEO) < 0) return -1;

SDL_WM_SetCaption("TEST", NULL);

SDL_Surface *screenSurface;
screenSurface = SDL_SetVideoMode(600, 300, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

SDL_Surface *image = IMG_Load("shot.png");
std::list<std::unique_ptr<IShot>> shots;
std::mt19937 engine(static_cast<unsigned int>(std::time(nullptr)));
unsigned int i = 0;

for(;;){
{
SDL_Rect dest;
dest.x = 0;
dest.y = 0;
dest.w = 600;
dest.h = 480;
SDL_FillRect(screenSurface, &dest, 0x00000000);
}

shots.emplace_back(new CShotLine(engine() % 600, engine() % 100, engine() % 2 + 1, (double)i++ / 200));

shots.erase(std::remove_if(shots.begin(), shots.end(), [](std::unique_ptr<IShot> &b){return !b->Move();}), shots.end());
std::for_each(shots.begin(), shots.end(), [&](std::unique_ptr<IShot> &b){b->Show(screenSurface, image);});

SDL_Flip(screenSurface);

SDL_Event ev;
while(SDL_PollEvent(&ev)){
switch(ev.type){
case SDL_QUIT:{
return 0;
}
case SDL_KEYDOWN:{
SDLKey *key = &ev.key.keysym.sym;
if(*key == 27){
return false;
}
break;
}
}
}
}

SDL_FreeSurface(image);
SDL_Quit();
return 0;
}

2494774さん:2010/07/23(金) 15:46:51
>Note: 少くとも10ミリ秒の遅延を考えて下さい。 プラットフォームによってはもっと短かい時間の場合もありますが、この値が最も一般的です。
-----
つまり、whileでループを回せということですね。分かります。

2495774さん:2010/07/23(金) 15:48:49
60fpsで動かしているのにかくかく。
スペックは余裕のはずである。

2496774さん:2010/07/23(金) 16:12:24
毎フレーム3px動くだけでかなり早い。
まあ、一秒で180pxも動くし。

2497774さん:2010/07/23(金) 16:59:09
糞ゲー出来た!

2498774さん:2010/07/23(金) 20:01:55
上手く動作しない。
繰り返しなのに、繰り返してない。
コンパイラ・・・

2499774さん:2010/07/23(金) 20:03:12
しかし、今までコンパイラのバグだと思っていたものが、やっぱり俺のミスだったので、今回もそうである気がする。

2500774さん:2010/07/23(金) 20:11:43
以下のソースが上手く動かない・・・
-----
class CShotLineSin : public IShot{
public:
virtual bool Move(){
double A = m_A * std::sin(m_frame * m_omega);
m_x += m_vx;
m_y += m_vy;
m_tx = m_x + A * m_cos;
m_ty = m_y - A * m_sin;
if(m_x < -10 - m_A || m_x > screen_width + 10 + m_A || m_y < -10 - m_A || m_y > screen_height + 10 + m_A){
return false;
}
m_frame++;
return true;
}
virtual void Show(SDL_Surface *screen){
SDL_Rect rc;
rc.x = static_cast<int>(m_tx) - 7;
rc.y = static_cast<int>(m_ty) - 7;
SDL_BlitSurface(m_image, nullptr, screen, &rc);
}
virtual bool HitTest(int x, int y){
int dif_x = m_tx - x;
int dif_y = m_ty - y;
if(dif_x * dif_x + dif_y * dif_y < 3 * 3){
return true;
}
return false;
}

CShotLineSin(int x, int y, double v, double rad, double A, double omega, SDL_Surface *image)
: m_x(x), m_y(y), m_tx(x), m_ty(y), m_sin(std::sin(rad)), m_cos(std::cos(rad)), m_vx(v * m_sin), m_vy(v * m_cos), m_A(A), m_omega(omega), m_image(image), m_frame(0)
{}

private:
double m_x, m_y;
double m_tx, m_ty;
double m_vx, m_vy;
double m_sin, m_cos;
double m_A;
double m_omega;
unsigned int m_frame;
SDL_Surface *m_image;
};

2501774さん:2010/07/23(金) 20:19:01
std::list::sizeってO(1)でいいのか?

2502774さん:2010/07/23(金) 20:20:57
でいいみたい。

2503774さん:2010/07/23(金) 23:48:44
Sleipnirオワタ。

2504774さん:2010/07/24(土) 00:07:11
Sleipnirがこの先生き残るには、少なくとも、Trident,Gecko,KHTMLのレンダリングエンジンを利用可能にし、キャッシュ、データベース、クッキーなどの情報を全てのレンダリングエンジンで共有できるようにし、Firefox,GoogleChrome,IEのプラグインをレンダリングエンジンに関係なく利用可能にし、ポータブルで完全に持ち運べるようにし、そして、ポータブル版は完全に使用したPCの環境を汚したりしなくて、他のどのブラウザよりも早い、ぐらいじゃないと使うことはないだろう。

2505774さん:2010/07/24(土) 00:23:13
Sleipnirアンインストール中・・・

2506774さん:2010/07/24(土) 00:31:18
さて、どうしようか。
GoogleChromeのプラグインの作り方でも勉強するか。

2507774さん:2010/07/24(土) 00:41:40
やりたいこと。
1.PEファイルを手動で読み込む and PEファイルにPEファイルの挿入
2.WAVを読み込んで、フーリエ級数展開 MIDI化
3.ゲーム(?) -> もうあれで満足(笑)
4.OpenCV
5.作曲
6.Webサイト制作 PHP

2508774さん:2010/07/24(土) 00:42:15
やりたいこと。
1.PEファイルを手動で読み込む and PEファイルにPEファイルの挿入
2.WAVを読み込んで、フーリエ級数展開 MIDI化
3.ゲーム(?) -> もうあれで満足(笑)
4.OpenCV
5.作曲
6.Webサイト制作 PHP
7.GoogleChrome or Firefoxのプラグインを書く。

2509774さん:2010/07/24(土) 01:02:47
俺のパソコンから、即起動可能な似非ブラウザはなくなったはずである。

2510774さん:2010/07/24(土) 16:04:02
俺が思ったことには、弾幕ゲーは、弾を飛ばすのが楽しい。

2511774さん:2010/07/24(土) 16:05:13
ちゃんとプログラミングを書くんだったら、リソース管理用のクラスとか用意して、キャラクターの情報は全て一つのクラスにまとめて(ry

2512774さん:2010/07/24(土) 16:11:53
整数の割り算が早いか、メモリ参照が早いか、doubleをintに変換するのが早いか。

2513774さん:2010/07/24(土) 16:36:49
std::list::remove_ifがあるだと!
そして、STLのページには、削除されなかったiteratorは有効であるだと!
これは良い。が、もうiteratorは使わないと思うのでどうでもいい。

2514774さん:2010/07/24(土) 16:39:08
30fpsで滑らかに動いて見えるんじゃないの?
テレビって30fpsなんでしょ?

2515774さん:2010/07/24(土) 16:59:09
1500個あたりで、60fpsでなくなるなあ。

2516774さん:2010/07/24(土) 17:01:28
間引きたいが、間引くには、ソートが必要だし、ランダムアクセス出来ないと間引く意味がないし。

2517774さん:2010/07/24(土) 17:03:11
挿入、消去、ランダムアクセス、ソートが定数時間で出来、順番は覚えて無くてもいい、そういうコンテナはないんだろうなあ

2518774さん:2010/07/24(土) 21:37:38
Windows 7の便利なキーボードショートカット15選 : ライフハッカー[日本版]
http://www.lifehacker.jp/2010/07/100722ucscopaw7.html

2519qnighy:2010/07/25(日) 13:23:11
定数時間は無理だけど、O(log n)なランダムアクセスが可能なように平衡二分木を実装することはできるはず。

ソート済みのデータ列と、未ソートのデータ列を、同時に管理するのは難しいかと。

要求仕様が曖昧なのでなんとも言えないですけど…

2520マインスイーパ:2010/07/25(日) 13:58:23
今夏、戦争にかかわる小説を書きたいのですが
戦争を経験したことがないのでどうしようかと。
祖父に聞いておけば良かったのかなと思っています。

まあ、戦争を経験していないからこそ、
こんなことを思い立つのですが。。。

2521マインスイーパ:2010/07/25(日) 13:59:27
書く場所間違えましたね。。。

2522774さん:2010/07/25(日) 17:35:48
>>2519
定数は無理ですよね・・・

元々、当たり判定を間引くためにx座標 or y座標でソートしようと思いましたが、今考えるとフレーム毎にソートをするとかどんだけ時間かかr(ry

2523774さん:2010/07/25(日) 17:37:56
>>2520
戦争とか体験したくないこと筆頭。
ネットで調べればいっぱい見つかると思いますが。

2524774さん:2010/07/25(日) 17:54:14
グレイズでも実装してみる。
仕様は、在る範囲に近づいたらフラグ立てて、その範囲から玉に当たらず出たら+1というシステムでいいだろう。

2525774さん:2010/07/26(月) 00:56:05
色々と書いてみて思ったこと。
弾のデータと軌道のデータは分けるべき。
弾の種類をランダムにすることはないと思うので、データをclassで纏めてtemplateで渡すようにするといい気がする。
ランダムに出来るような仕様も一応出来るようにはしておく。あと、リソースの管理を引き受けるクラスも勿論要る。
struct 丸いの{
static bool HitTest(RECT &rc){
//・・・
}
static bool HitTest(unsigned int x, unsigned int y){
//・・・
}
static void Show(){
CResource::getInstance()->ShowImage(/*なんとかかんとか*/); //こうはしないだろうが・・・
}
};

template<class Shot>
class CShotLine : public IShot{
virtual bool HitTest(const RECT &rc){
//・・・ (rcを座標変換して、bufへ)
return Shot::HitTest(buf);
}
//(略)
};

2526774さん:2010/07/26(月) 00:57:10
こうすれば、最適化されてそこまで酷くはならないだろう。

2527774さん:2010/07/26(月) 16:10:27
弾を回転させる時はどうしようか。
四角い弾を飛ばすんだったら、回転させたいよなあ。

まだ、double型とint型の変換スピードとか比較はしていないが、恐らくビットシフトよりは遅いので、全体の座標は2^n(2**n)倍にして保持するようにしよう。

2528774さん:2010/07/26(月) 16:55:56
大学でRubyやるし、これを機会に勉強してみるか。
簡単にサーバープログラム書けるみたいだし。
今日からやるわけではない。
なんか前も言った気がする。

2529774さん:2010/07/26(月) 17:07:29
>>2528
日本人じゃないみたい・・・

2530774さん:2010/07/26(月) 17:15:36
某所で見たが、元々何処で見たか分からないようなTips。
メンバ関数ポインタはアップキャスト可能。
-----

#include <iostream>
#include <windows.h>

class ITest{
public:
virtual double Function(unsigned int i) = 0;
};

class CDoubleTest : public ITest{
public:
virtual double Function(unsigned int i){
return static_cast<double>(i);
}
};

class CDouble2Test : public ITest{
virtual double Function(unsigned int i){
return static_cast<double>(i * 2);
}
};

int main(int argc, char **argv){
if(IsDebuggerPresent()){
DebugBreak();
}

CDoubleTest dt;
CDouble2Test dt2;
ITest *pt = &dt;
double (CDoubleTest::*pdf)(unsigned int) = &CDoubleTest::Function;
double (ITest::*pif)(unsigned int) = (double (ITest::*)(unsigned int))pdf;
std::cout << (dt.*pdf)(100) << std::endl;
std::cout << (dt.*pif)(100) << std::endl;
//std::cout << (pt->*pdf)(100) << std::endl; //暗黙の型変換は無理らしい
std::cout << (pt->*pif)(100) << std::endl;
std::cout << (dt2.*pif)(100) << std::endl; //元と型が違ってもいい
}

2531774さん:2010/07/26(月) 17:30:37
俺は参照よりポインタの方が好きだ!

2532774さん:2010/07/26(月) 17:31:29
どうせ、処理スピードは一緒です。
違う例ってなにかあるのか?

2533774さん:2010/07/26(月) 17:46:46
適当にunsigned int型をdoubleに変換するだけのソースを書いたのだが、これが32bitsと64bitsで速度が結構違う。
呼出の所で最適化が行われないようにするためにvirtual化して、TestIt関数に渡して多態性が出るようにしてある。(ソースは下)
で、測ってみたところ、64bitsの方が大体7/8の時間で終わらせるようだ。CPUの仮想化の影響?どうやって、64bitsと32bitsを切り替えているんだっけなあ。
-----
class ITest{
public:
virtual double Function(unsigned int i) = 0;
};

class CDoubleTest : public ITest{
public:
virtual double Function(unsigned int i){
return static_cast<double>(i);
}
};

void TestIt(ITest *p){
Timer t;
t.Start();
for(unsigned int i = 0; i < 1000000; ++i){
p->Function(i);
}
t.Stop();
std::cout << typeid(*p).name() << std::endl;
std::cout << t.Distance() << std::endl;
}

int main(int argc, char **argv){
if(IsDebuggerPresent()){
DebugBreak();
}

CDoubleTest dt;

TestIt(&dt);
}
-----

2534774さん:2010/07/26(月) 17:52:28
あれ・・・
回数増やすとかなり近くなる。

2535774さん:2010/07/26(月) 17:53:14
あれ、誤差の範囲内だったのか・・・?
五回ぐらいそれぞれ測定したのだが。

2536774さん:2010/07/26(月) 17:55:38
CDoubleTestは上のソース通り。CControlTestはstatic_cast<double>(0);を返すだけ。
64bistはCDoubleTestが7000000を超えることは無かった。(四回しか計ってないが・・・)

C:\Users\Owner\Desktop\projects\gcctest>g++ main.cpp -O3 -std=c++0x -m32

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
11CDoubleTest
7046745
12CControlTest
6908983

C:\Users\Owner\Desktop\projects\gcctest>g++ main.cpp -O3 -std=c++0x -m64

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
11CDoubleTest
6906016
12CControlTest
6884568

2537774さん:2010/07/26(月) 17:56:21
64bitsのプログラムをデバッグできるOllyDbgが欲しい。

2538774さん:2010/07/26(月) 18:10:10
えっ・・・。
return static_cast<double>(i) * 2;の方が、
return static_cast<double>(i * 2);より早いだと・・・

前者-----
0040DAF0 /. 55 PUSH EBP
0040DAF1 |. 89E5 MOV EBP,ESP
0040DAF3 |. 83EC 08 SUB ESP,8
0040DAF6 |. 660F6E45 0C MOVD XMM0,DWORD PTR SS:[ARG.2]
0040DAFB |. 660FD645 F8 MOVQ QWORD PTR SS:[LOCAL.2],XMM0
0040DB00 |. DF6D F8 FILD QWORD PTR SS:[LOCAL.2]
0040DB03 |. D8C0 FADD ST,ST
0040DB05 |. C9 LEAVE
0040DB06 \. C3 RETN

後者-----
0040DCE0 /. 55 PUSH EBP
0040DCE1 |. 89E5 MOV EBP,ESP
0040DCE3 |. 83EC 10 SUB ESP,10
0040DCE6 |. 8B45 0C MOV EAX,DWORD PTR SS:[ARG.2]
0040DCE9 |. 01C0 ADD EAX,EAX
0040DCEB |. 8945 F4 MOV DWORD PTR SS:[LOCAL.3],EAX
0040DCEE |. 660F6E45 F4 MOVD XMM0,DWORD PTR SS:[LOCAL.3]
0040DCF3 |. 660FD645 F8 MOVQ QWORD PTR SS:[LOCAL.2],XMM0
0040DCF8 |. DF6D F8 FILD QWORD PTR SS:[LOCAL.2]
0040DCFB |. C9 LEAVE
0040DCFC \. C3 RETN

2539774さん:2010/07/26(月) 18:10:51
C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6999951
12CControlTest
6954194
11CDoubleTest
7152501
12CDouble2Test
8027300
13CDouble2Test2
10438310

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
7130992
12CControlTest
6921307
11CDoubleTest
6988063
12CDouble2Test
7870519
13CDouble2Test2
9395658

2540774さん:2010/07/26(月) 18:14:20
三倍でも変わらないwwww
後からdoubleに変換する定数倍はdoubleに変換してから行ったほうが早い。
-----
C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6888722
12CControlTest
6887930
11CDoubleTest
7870127
12CDouble2Test
7288124
13CDouble2Test2
9397208
12CDouble3Test
7879957
13CDouble3Test2
9421286

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6893313
12CControlTest
6871961
11CDoubleTest
7875863
12CDouble2Test
7290366
13CDouble2Test2
9377153
12CDouble3Test
7853346
13CDouble3Test2
9399327

2541774さん:2010/07/26(月) 18:19:42
これって一度XMMレジスタで行っているから遅いんじゃね?

2542774さん:2010/07/26(月) 18:21:16
unsigned intが必ず早いわけじゃないんだなあ。まあdoubleに変換しているからだと思うのだが。
QueryPerformanceFrequency=2078154
12CControlTest
6987426
12CControlTest
6981907
11CDoubleTest
7988838
14CDoubleMulTestILj2EE
7993224
15CDoubleMulTest2ILj2EE
9500573
14CDoubleMulTestILj128EE
8000337
15CDoubleMulTest2ILj128EE
9533468
14CDoubleMulTestILj1024EE
7999294
15CDoubleMulTest2ILj1024EE
9501704

2543774さん:2010/07/26(月) 18:24:15
2の累乗じゃない値にすると、最早unsigned intは死亡する。
これは酷い。
-----
C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6951026
12CControlTest
6981173
14CDoubleMulTestILj1000EE
7971458
15CDoubleMulTest2ILj1000EE
9969852

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
7001421
12CControlTest
6979492
14CDoubleMulTestILj1000EE
7971876
15CDoubleMulTest2ILj1000EE
9989926

2544774さん:2010/07/26(月) 18:24:48
因みに繰り返し回数は十億回です。

2545774さん:2010/07/26(月) 19:43:37
(1..100).each{|i|f="Fizz";b="Buzz";a=f,i,i;puts [[f+b,b,b],a,a,a,a][i%5][i%3]}
-----
へ?

2546774さん:2010/07/26(月) 19:44:26
ああ。
理解。

2547774さん:2010/07/26(月) 19:46:07
''=~('('.'?'.'{'.('`'|'%').('['^'-').('`'|'!').('`'|',').'"'.('`'|'&').('`'|'/').('['^')').'('.('^'^('`'|'/')).'.'.'.'.('^'^('`'|'/')).('^'^('`'|'.')).('^'^('`'|'.')).')'.'\\'.'{'.('`'|')').('`'|'&').'('.'\\'.'$'.'_'.'%'.('^'^('`'|'/')).('^'^('`'|'+')).'='.'='.('^'^('`'|'.')).')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'&').('`'|')').('['^'!').('['^'!').('`'^'"').('['^'.').('['^'!').('['^'!').'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.('`'|'%').('`'|',').('['^'(').('`'|')').('`'|'&').'('.'\\'.'$'.'_'.'%'.('^'^('`'|'-')).'='.'='.('^'^('`'|'.')).')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'&').('`'|')').('['^'!').('['^'!').'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.('`'|'%').('`'|',').('['^'(').('`'|')').('`'|'&').'('.'\\'.'$'.'_'.'%'.('^'^('`'|'+')).'='.'='.('^'^('`'|'.')).')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'"').('['^'.').('['^'!').('['^'!').'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.('`'|'%').('`'|',').('['^'(').('`'|'%').'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.'\\'.'$'.'_'.'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.'\\'.'}'.'"'.'}'.')')

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,"\n"for 1..100

perl意味分からん。

2548774さん:2010/07/26(月) 20:05:10
>>2547
は、一行目だけで一つのプログラムです。

2549774さん:2010/07/26(月) 20:35:16
Haskellな人が、C++の型推論もどきのどこが型推論なんだみたいなことを言っていたが、本当だな。
Haskellすげー

2550774さん:2010/07/26(月) 22:40:38
俺がスピードに拘る理由はない。気分である。キリッ。

2551774さん:2010/07/26(月) 23:49:34
弾幕に関する本が売っていたが、前はアホだろとか思ってたが、今はちょっと欲しい。
なかなか弾幕は思い浮かばない。

2552774さん:2010/07/27(火) 18:11:09
3Dソフト?
俺には到底出来ない。
そういえば、3Dソフトとかポリゴンどれくらい描画しているのかね?
このパソコンは2Dで弾を1500ぐらい表示させただけで60fps出なくなるのだが・・・
やはり当たり判定を改善しないと駄目なのか?
それともSDL使うと遅くなるのはデフォ?

2553774さん:2010/07/27(火) 19:18:16
>>2551
龍神録プログラミングの館
http://dixq.net/rp/

下の方に東方の弾幕を参考にしたやつ乗ってるけど参考になるもんかね

2554774さん:2010/07/27(火) 23:12:19
>>2553
参考にしてみますが、多分今の所無理です。
面倒臭いので、内部的には直線の弾しか飛ばせないwwwww
Luaとか導入して弾幕を楽に追加できるようにしたい。
最終的には弾幕プレーヤー見たいな乗りで。

2555774さん:2010/07/28(水) 00:02:16
gcc4.5.0不安定すぎる。
正しくコンパイルできない。

2556774さん:2010/07/28(水) 00:05:00
明らかにコンパイラのバグ・・・、だと思う。
適当に再現ソースを作ってみるか・・・

2557774さん:2010/07/28(水) 22:23:33
都合がいい時だけ正しく動きやがるコンパイラ、GCC!

2558774さん:2010/07/28(水) 23:11:52
やっぱり俺のミスっぽい。
GCCにミスは無かった!!

2559774さん:2010/07/28(水) 23:13:20
結論:コンパイルするときは-Wallを付けましょう。

2560774さん:2010/07/28(水) 23:23:07
やはり描画処理が一番遅いらしい。

2561774さん:2010/07/28(水) 23:23:35
描画処理が無かったら2000個弾を飛ばしても遅延しなかった。

2562774さん:2010/07/28(水) 23:39:41
32bitsが非常に軟弱だと思う限り。

2563774さん:2010/07/29(木) 00:40:38
unsigned intとintの暗黙の変換はやめていただきたい限りだ。

2564774さん:2010/07/29(木) 19:02:36
HTML5についてのおさらい - W3G Blog Studies
http://w3g.jp/blog/studies/html5report

2565774さん:2010/07/29(木) 23:42:36
Going My Way: マルチタスク対応 iPhone 4 で乗り越し防止に役立つアプリ、駅ベル
http://kengo.preston-net.com/archives/004622.shtml
-----
こういうの出たら、自分で作ればただなんだなあと。
まあ、iPod touchにはGPS機能が付いていないので関係ないのだが。

2566774さん:2010/07/30(金) 14:36:27
テスト終了記念で寝るか。

2567774さん:2010/07/30(金) 22:21:14
HTML5を今すぐ使うためのコツや情報をまとめてみました - EC studio デザインブログ
http://designblog.ecstudio.jp/htmlcss/start-html.html
-----
CSSのセレクタのパフォーマンスに付いては微妙じゃね?
正直回線速度の方が影響が大きいだろ。
JavaScriptで何万回もセレクタで選択する処理を繰り返すならば、考えてもいいが、基本イニシャルコストなんだから普通に払っても良いと思う。

2568774さん:2010/07/30(金) 22:22:09
付いて→就いて

2569774さん:2010/07/30(金) 23:26:05
はやり東方は、弾幕の美しさが違う。
計算すれば再現できるのだろうが・・・


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板