Visual Studio 2008 Part 22
■ このスレッドは過去ログ倉庫に格納されています
■公式 ttp://www.microsoft.com/japan/msdn/vstudio/default.aspx ■前スレ Visual Studio 2008 Part 21 http://peace.2ch.net/test/read.cgi/tech/1290969016/ ■リンク Visual Studio 2008に搭載された17の新機能 ttp://www.atmarkit.co.jp/fdotnet/special/visualstudio2008_01/visualstudio2008_01_01.html 5000個のバグと戦った、MSが「Visual Studio 2008」RTM出荷 ttp://www.atmarkit.co.jp/news/200711/20/vs.html ■関連 Visual Studio 2013 part4 http://peace.2ch.net/test/read.cgi/tech/1404333757/ Visual Studio 2012 Part8 http://peace.2ch.net/test/read.cgi/tech/1392639689/ Visual Studio 2010 Part21 http://peace.2ch.net/test/read.cgi/tech/1412136476/ Visual Studio 2005 Part 27 http://peace.2ch.net/test/read.cgi/tech/1291513609/ その他テンプレ>>2-5 VC++ & DarkGDK & マルチスレッドの時代。(アハ Microsoft Visual C# 2008 インストールしました! よろしくおねがいします! VC++ & DarkGDK & マルチスレッドの時代。(アハ 次回テンプレには、念のため、次のURLもヨロシクです。 http://echo.2ch.net/test/read.cgi/tech/1453310799/l50 Visual Studio 2015 Part4©2ch.net VS2008ExpressWithSP1は、本体が1GB未満とサイズが小さいから、インストールにもそれほど時間はかからない。 まだまだExpress使い続けるよ やはり2008 SP1が一番良いなと感じる 光学メディアに焼いてインストールすれば Micorsoftに登録しなくても使えるって利点があるよね。 ネットワークから隔離した古い機械・古いOSで使える。 >>77 デバッグウィンドウのサイズを変えようとすると、 影が変なところに出てこない? Panda3D SDK 1.9.3をMicrosoft Visual C++ 2008 Express Edition で使いたいのですが、インクルードで躓いてます。 どうやるのか教えてください >>120 汚い方法は、インクルードパスに必要なヘッダーファイルを貼り付けて、ライブラリパスにビルド済みのライブラリファイルを貼り付ける。 システムを汚さない方法はプロジェクトのプロパティでヘッダーファイルがある場所をインクルードパスに追加し、ビルド済みのライブラリファイルがある場所をライブラリパスに追加。 これでOK。 https://www.panda3d.org/manual/index.php?title=Running_your_Program& ;language=cxx に2010(2015でも良い)って書いてあるけど、わざわざ苦行を求めるのか? 2008ではサポートされてないWindows7 SDKが必要らしいんで、できるとしても面倒くさい可能性大 ttp://i.imgur.com/BeSeq2w.jpg print " とすると勝手に print ""になってエンターを押すと print " " っておかしくなります print "" | ってするにはどおするばよいですか? うまく伝えてられるかわかりませんがよろしくお願いします m(_ _)m >>124 Endキーでも使うとか? 補完自体を殺すことも設定で可能だったと思うけど >>124 コメント内容 パソコンの周りをきれい委にする。 今の時代、パソコンでテレビが見れないとだめなのか。 古い奴だとお思いでしょうが、古い奴こそ新しいものを欲しがるもんでございます。 どこに新しいものがございましょう… 「傷だらけの人生」 藤田まさと作詞・吉田正作曲 VC++2008にユーザプリプロセッサを噛ませる方法ってある? 関連質問は以下。 http://mevius.2ch.net/test/read.cgi/tech/1514025223/395 VC++2017相当のラムダをVC++2008で使いたい。 MSVCのプリプロセッサだけでは多分無理っぽい。 自前のプリプロセッサをまず通し、結果をVSでコンパイルすれば確実にいけるのだが、 これをやる方法ってある? (自前のプリプロセッサはスクリプト言語で書く) .cppじゃなくて.cupみたいなソース書いて .cup->.cppにするならいける まあどっちでもいいと思うが。 Cマクロで出来れば一番簡単だが、どうやらこれは無理。 ならば次善策は自前でのスクリプティングであり、 主な手間はmakefile/カスタムビルドツール設定ではなく、 スクリプトを作成することなんだから、この際起動はどっちでもいいだろ。 ちなみに、以下確かに動くのだが、これってどうなん? https://stackoverflow.com/questions/472667/lambda-expressions-support-in-vs2008-sp1 (超絶簡単なソースしか試してないが) ・コンパイルは c:\windows\microsoft.net\framework\v2.0.50727\system.dll : warning C4945: が出つつも通る。 ・F5でのデバッグ実行が出来ない。「デバッガのプロトコルがデバッグされる対象と互換性がありません」 ・IntellisenseはVC++/CLIでも機能している。 >>146 なおラムダはGUIからの機能選択部で使うので、 結構な頻度で追加/書き換えしており、ソースは分離したくない。 普通に考えればVC++2017に上げればいいだけではあるが、 環境を変更すると色々他の問題が発生するかもしれないのでちょっと無理しようとしている。 >>147 >確かに動くのだが、これってどうなん? 動くならそれでいいんじゃない? 同じレス内で >環境を変更すると色々他の問題が発生するかもしれないので っていうのとは真逆の態度だとは思うが まだカスタムビルドには組み込んでいないが、スクリプトを作成し、動作することを確認した。 知恵を絞ってくれた人はありがとう。現在の解決策は以下。 ・#define LAMBDA でインラインの展開を行う。 ・クラス宣言部はスクリプトで作成し、これをincludeする。 VS2017に上げてもLAMBDAマクロ宣言部だけの変更(1行)で済む予定なので、まあまあかと。 とりあえずこれで様子見します。 最終列車に乗り遅れるな VC++2008Expressサポート切れまであと1日。 2018年4月11日(水)でサポート終了。 修正パッチの入手の終わってない人は忘れないように。 https://forest.watch.impress.co.jp/docs/news/1116235.html 「Microsoft Visual Studio 2008」のサポートが終了 〜無償版「Express Edition」も 「Microsoft SQL Server Compact 3.5」なども対象 《 後継開発環境のご案内 》 LinuxMintのダウンロードはこちらから。 Main Page - Linux Mint https://linuxmint.com/ https://linuxmint.com/download.php --------- AGK無料試用版の配布開始(リンク先にWindows、Mac、Linux版のファイルが直接置いてある) AppGameKit - Free Trial Version https://www.appgamekit.com/trial 無料試用版 AppGameKit無料トライアル版は、AppGameKitの主要な領域すべてにアクセスできるため、 完全に評価することができます。完全版の有料版には、次の主要機能が含まれています。 ・ Android、iOS、HTML5にプロジェクトをエクスポートする ・ アプリをデバイスに直接ブロードキャストする ・ コンパイルされたプロジェクトからウォーターマークを削除する WineでPassmarkとHDbenchを試したところ、シングルスレッド性能はWindowsより若干高く、マルチコア性能は半分程度に留まった。 おそらくWine内部処理の都合と言うことにw また、DirectXテストは通らなかった。GDIクラスのみ。 …って言う訳で、早速Linuxのパフォーマンステスト。 64x64ピクセルの2Dスプライトの表示枚数をカウントして、パフォーマンスを計測してみよう。 ダウンロードは以下のリンクからどうぞ。 http://upload.saloon.jp/src/up27011.zip Firefoxブラウザの右上にダウンロードマーク(↓)の付いたアイコンをクリックして、ファイル アイコンをクリックすると、zipファイルの入ったフォルダが表示されるので、右クリックして 「 Extract Here 」 を選ぶ。 次に、「 agk_sample 」 と言うフォルダが作成されるので、ダブルクリックする。 フォルダの中に 「 abc 」 と言う拡張子のないファイル、「 media 」 と言うランタイムの入った フォルダが作成されている。 「 abc 」 と言う拡張子のないファイルが、実行ファイルで、これを迷わずダブルクリックすれ ばよいw だいたい2分ぐらいで最大表示枚数が安定する。 プログラムの終了は [ ESC ] キー。 Celeron G1820 + Intel HD無印 で1500枚程度。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 CRP7I ではではw Intel Pentium G5 CoffeeLake 総合スレ http://anago.open 2ch.net/test/read.cgi/jisaku/1526884213/ 起動の仕方で浮動小数点演算に誤差が発生するのだけど、理由が分かる人居ますか? 今のところ、 A. Debugビルドのバイナリをダブルクリックして起動 B. Releaseビルドのバイナリをダブルクリックで起動 C. DebugビルドまたはReleaseビルドでF5で起動 の3種類出来てる。それぞれ微妙な誤差だ。(doubleの下位ビット) AとBの違いについては諦めていたのだが、(なお両方とも/fp:precise) 実はCもあると気づいてしまった。 なお、バイナリをダブルクリックして起動、それにIDEをアタッチしても結果は変わらない。 それぞれAまたはCが出る。 何かIDEの設定を間違っているのだと思うのだけど… 再現性は100%なので、初期化のミスではない。(と思っている) 演算途中の結果を double なら16進16桁でテキストにダンプしている。 数値だけではないが500MB程度のファイルが出力され、 diff を取ることによりレグレッションテストをしている。 今のところ、A/B/Cの3種類しか出ない。 初期化忘れならこうはならない。(はず) MSのエンジニアを信じるか、再現可能なソースも示さず問題だ問題だ言ってるとこの馬の骨とも知れない奴を 信じるかって言われたら迷うことなく前者を信じるw 俺はIDEのバグだとは思っていない。 何かIDEの設定があって、俺がそれを適切にやってないのだと思っている。 色々見た限り、俺は /fp:precise しか発見出来なかった。 ただしこれは一応適切に設定されている。 他にないかな?ということ。 IDEじゃなくてコマンドラインからコンパイラで直接コンパイルしても一緒? どういう意味? (どれとどれの違いにフォーカスしろと?) 俺はバイナリに問題があるとは思っていない。 何らかの理由で浮動小数点のモードが切り替えられたりしてないかを疑ってる。 だからIDEの設定とか、そっちを見てる。 Release/Debugのバイナリは当たり前だが違ってる。 /O2と/Od等だ。 ただそれでも /fp:precise の場合は 浮動小数点の演算順序を入れ替えない範囲で最適化される事になっている。 逆アセンブラは見たけどちょっとグチャグチャすぎてよく分からなかった。 (見た範囲では演算順序の入れ替えはないように思えた) >>166 double型を使っていても、SSEのXMMレジスタなどを使う場合、昔のfld, fst, fmulなどを使う場合より基本的には精度が落ちる。 丸めの方向も四捨五入、正負どちらかの方向への丸めや切り捨てなどの他、確か、精度を気にしない、なんてオプションもあった気がする。ゲームで使うことを想定しているらしい。 SSE用に最適化を掛けると、速度は上がるが精度は落ちるかも知れない。 >>173 今の範囲ではSSEは使っていない(はず) 「拡張命令セットを有効にする」は「設定無し」になっている。(多分デフォのまま) 見た目全部x87が出てたし。 やっぱRelease/Debugの違いから攻めろって感じか? 俺もF5起動で結果が異なるってのは全く予想してなかったし。(ただしこちらの問題だろうけど) 演算部分は場合によってはSSEのアセンブラに差し替えるので、 問題になる場合には、Release/Debugの違いはこれで吸収するつもりだった。 (これは1ヶ月後にやるかも) 浮動小数点の誤差を考慮に入れてないというイージーな仕様バグですね。 再現するコードをみないとなにもわかるわけがない 低学歴知恵遅れが書くコードなんかなにをやってるか分からないからな ごちゃごちゃいってないで再現するコードをあげなさい 月並みな意見だけど、 「症状を再現できる最小のソースと初期データ、それとコンパイル環境」 まで切り詰めてみるのが早道じゃないかな。 ちょくちょく発生する事例なら、解決策を知ってる誰かが教えてくれてるかと。 週末、より多くの人が質問を見ることを期待して待つ手もあるけど。 より基本に立ち返ろう そもそも誤差はあるのか? 計算結果を何を使ってどう出力しているかだけでもソースを見せてくれ >>174 x87でも誤差を丸める方法を fpu control word で設定できる事は出来る。 四捨五入と切り捨てなどを切り替えられる。 fpu control word で、丸め方法と、精度の二つを独立に設定できる。 この精度の設定で、メモリ上の表現がdouble型でも、計算時のfpuの内部精度が変わってくる。 普通は64bit doubleに対して、fpu内部では80bitの精度で計算する。仮数部のbit数は、確か、それぞれ、53BIT、64BITだったかな。 Intel® 64 and IA-32 Architectures Software Developer’s Manual [Vol 1] 11.6.8 Compatibility of SIMD and x87 FPU Floating-Point Data Types SSE and SSE2 extensions operate on the same single-precision and double-precision floating-point data types that the x87 FPU operates on. However, when operating on these data types, the SSE and SSE2 extensions operate on them in their native format (single-precision or double-precision), in contrast to the x87 FPU which extends them to double extended-precision floating-point format to perform computations and then rounds the result back to a single-precision or double-precision format before writing results to memory. Because the x87 FPU operates on a higher precision format and then rounds the result to a lower precision format, it may return a slightly different result when performing the same operation on the same single-precision or double-precision floating-point values than is returned by the SSE and SSE2 extensions. The difference occurs only in the least-significant bits of the significand. >>181 書いてある意味は、 「SSEやSSE2だと、float(32BIT)やdouble(64BIT)のまま計算するが、x87 fpuだと、もっと高い精度であるところの 『double extended-precision floating-point format(拡張倍精度浮動小数点フォーマット:80BIT)』 で計算を実行して、丸めてから、floatやdoubleに戻す。 そのため、SSE/SSE2 と x87 fpuでは結果が変わることがある。 しかし、その場合でも結果の違いは、仮数部の LSB (最も価値の小さいBIT)の1BITにだけ現れる。」 というような事。 揚げ足取りだけどLSBを「最も価値が小さい」って直訳はいかがなものかなw 普通に最下位ビットじゃないの? ところで > the least-significant bits これ何で複数形なのかね >>182 ありがとう。 ただ一応それは知ってて、その上で、IDEの環境設定等を疑っている。 >>177 とはいえ地道に辿って、同様の再現コードを作ることに成功しそうだ。 もう少し調べて、多分今晩か明日午前中に上げる。 >>183 「The difference occurs only in the least-significant bits of the significand.」 これは、SSE の場合の LSB と、x87 FPU の場合の FPU の2種類を頭の中に想定していると思われる。 SSE: a1 = 1.xxxxxxxxz * 10^b x87 : a2 = 1.yyyyyyyyw * 10^c つまり、LSB は、↑のように、z と w で、2つあるので、LSBs という英語になる。 誤:これは、SSE の場合の LSB と、x87 FPU の場合の FPU の2種類を 正:これは、SSE の場合の LSB と、x87 FPU の場合の 2種類を >>183 >揚げ足取りだけどLSBを「最も価値が小さい」って直訳はいかがなものかなw >普通に最下位ビットじゃないの? 整数の場合は、「最下位ビット」というと、本当にBITの位置が一番右にあるようなイメージもある。 一方、浮動小数点数の場合は、右にあるとかより、仮数部において、一番価値の小さいビット、というニュアンスを使えたかった。 IEEEでは、それは確かに一番右にあるビットであって、マシン語レベルの表現では、BIT0ではあるのだが。 ニュアンス的に。 >>186 それは俺も思ったけど、それならsignificandの方も複数じゃないとおかしいような... 同様の症状を再現出来るようになったので上げる。 完全再現は出来てないが、使い物にはなるはず。興味がある人はよろしく。 症状: 単独で起動した場合と、IDEから起動した場合で、結果が異なる。 環境: VS++2008ExpressEdition 再現方法: 1. 新規プロジェクトを作成。(CLRコンソールアプリケーション。オプション等は全てデフォのまま) 2. mainを以下ソースと差し替える。 3. Releaseビルドで実行する。(Debugビルドでは再現しなかったので注意) 結果: 0.000000, 0x1ff68ddfb62221dd (IDEからの起動(F5)) 0.000000, 0x1ff68ddfb62221de (コマンドプロンプトからの起動) 最後の2bitが異なる。(誤差は1bit) 備考: 俺が遭遇しているのとはやや異なる。(俺の場合、Debugビルドでもこれが発生する) この再現状況だと、単に 「DebugとReleaseでバイナリが異なり、 IDEから起動した場合は常にDebugバイナリを掴んでいるだけでは?」 とも取れるが、こちらで確認した限りはちゃんとReleaseバイナリを掴んでいる。 理由は、 1. Debug/Releaseの両方のバイナリがない状態で実行した場合、 自動的に作成されるのはReleaseバイナリ。(当然だが) 結果は****ddとなる。(ブレークポイント等で止めて確認する) 2. そのReleaseバイナリをコマンドプロンプトから起動すると、****deの結果が得られる。 ソース: #include "stdafx.h" #include <math.h> using namespace System; template<typename T> static double calc_norm_and_regulate(int num, T* r, bool regulate){ // <float> for debug. double norm = 0; for (int i=0;i<num;i++) norm += (double)r[i] * (double)r[i]; norm = sqrt(norm); if (regulate) for (int i=0;i<num;i++) r[i] = (T)(r[i]/norm); return norm; } int main(array<System::String ^> ^args) { int count = 16; __int64 inputs_hex[16] = { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3, 0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}; double* inputs = (double*)inputs_hex; double norm = calc_norm_and_regulate(count, inputs, false); Console::Write(String::Format("{0:F6}, 0x{1:x16}\r\n",norm, *(__int64*)&norm)); // Release build // 0.000000, 0x1ff68ddfb62221dd from IDE // 0.000000, 0x1ff68ddfb62221de from command prompt return 0; } ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる