154: Visual Studio 2008 Part 22 (311)
2ちゃんねるブックマークは2ちゃんねる(2ch.sc)のログをブックマーク出来るビュアーです。


154: Visual Studio 2008 Part 22 (311)

【pc】
pp 

1 デフォルトの名無しさん
2014/10/13(月) 15:13:20.18 ID:yFRqmPNp

■公式
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

Visual Studio 2008 Part 22



【pc】





スレッドの最初から全部を見る 人気スレッドリスト

外国語アレルギーの方に朗報!
2ちゃブで外国語を楽しく学ぼう!





142 デフォルトの名無しさん
2018/01/20(土) 13:44:14.42 ID:5zEZap2N

最近の人はmake書いたこと無いんか

143 デフォルトの名無しさん
2018/01/20(土) 14:14:17.24 ID:bSTKludV

142
手動makeか。まあその手もあるか。

144 デフォルトの名無しさん
2018/01/20(土) 14:25:54.52 ID:Hc/lJP5p

Makefile家や

145 デフォルトの名無しさん
2018/01/20(土) 14:27:12.33 ID:4AOaXNlF

make書いたら負け

146 デフォルトの名無しさん
2018/01/20(土) 14:40:08.73 ID:bSTKludV

まあどっちでもいいと思うが。

Cマクロで出来れば一番簡単だが、どうやらこれは無理。
ならば次善策は自前でのスクリプティングであり、
主な手間はmakefile/カスタムビルドツール設定ではなく、
スクリプトを作成することなんだから、この際起動はどっちでもいいだろ。

147 デフォルトの名無しさん
2018/01/20(土) 15:02:15.30 ID:4AOaXNlF

Dで書いてobjリンクする

148 デフォルトの名無しさん
2018/01/20(土) 15:57:47.74 ID:bSTKludV

ちなみに、以下確かに動くのだが、これってどうなん?
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でも機能している。


147
なおラムダはGUIからの機能選択部で使うので、
結構な頻度で追加/書き換えしており、ソースは分離したくない。
普通に考えればVC++2017に上げればいいだけではあるが、
環境を変更すると色々他の問題が発生するかもしれないのでちょっと無理しようとしている。

149 デフォルトの名無しさん
2018/01/20(土) 16:02:31.52 ID:5zEZap2N

本質と関係ない話題の方が盛り上がるのが2ch

150 デフォルトの名無しさん
2018/01/20(土) 16:09:16.48 ID:5zEZap2N

148
>確かに動くのだが、これってどうなん?

動くならそれでいいんじゃない?

同じレス内で

>環境を変更すると色々他の問題が発生するかもしれないので

っていうのとは真逆の態度だとは思うが

151 デフォルトの名無しさん
2018/01/20(土) 23:47:48.29 ID:bSTKludV

まだカスタムビルドには組み込んでいないが、スクリプトを作成し、動作することを確認した。
知恵を絞ってくれた人はありがとう。現在の解決策は以下。

・#define LAMBDA でインラインの展開を行う。
・クラス宣言部はスクリプトで作成し、これをincludeする。

VS2017に上げてもLAMBDAマクロ宣言部だけの変更(1行)で済む予定なので、まあまあかと。
とりあえずこれで様子見します。

152 デフォルトの名無しさん
2018/04/10(火) 07:51:46.77 ID:25Me0atb

最終列車に乗り遅れるな

VC++2008Expressサポート切れまであと1日。
2018年4月11日(水)でサポート終了。

修正パッチの入手の終わってない人は忘れないように。

153 デフォルトの名無しさん
2018/04/10(火) 14:36:15.41 ID:JIHFaEMv

GJ

154 デフォルトの名無しさん
2018/04/11(水) 01:33:09.61 ID:PizNPnSY

必死だなぁw

155 デフォルトの名無しさん
2018/04/11(水) 13:05:30.31 ID:Gexxa1fK

https://forest.watch.impress.co.jp/docs/news/1116235.html

「Microsoft Visual Studio 2008」のサポートが終了 ~無償版「Express Edition」も

「Microsoft SQL Server Compact 3.5」なども対象

156 デフォルトの名無しさん
2018/04/11(水) 13:06:06.48 ID:bG1z7LTF

ああ終わったか
乙でした

157 デフォルトの名無しさん
2018/04/11(水) 13:26:11.45 ID:bG1z7LTF

てst

158 デフォルトの名無しさん
2018/04/12(木) 14:51:25.15 ID:nqXIWDjI

《 後継開発環境のご案内 》

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にプロジェクトをエクスポートする
・ アプリをデバイスに直接ブロードキャストする
・ コンパイルされたプロジェクトからウォーターマークを削除する

159 デフォルトの名無しさん
2018/04/16(月) 00:56:57.36 ID:CadfvnK3

WineでPassmarkとHDbenchを試したところ、シングルスレッド性能はWindowsより若干高く、マルチコア性能は半分程度に留まった。
おそらくWine内部処理の都合と言うことにw

また、DirectXテストは通らなかった。GDIクラスのみ。

160 デフォルトの名無しさん
2018/04/22(日) 03:49:49.80 ID:CAx4oxnE

…って言う訳で、早速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枚程度。

161 デフォルトの名無しさん
2018/05/23(水) 19:42:34.90 ID:Au5e7VGg

僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

CRP7I

162 デフォルトの名無しさん
2018/05/24(木) 10:53:48.52 ID:cPlRxlDn

CRP7I

163 デフォルトの名無しさん
2018/05/25(金) 19:20:37.97 ID:TsdeULHr

ではではw

Intel Pentium G5 CoffeeLake 総合スレ
http://anago.open 2ch.net/test/read.cgi/jisaku/1526884213/

164 デフォルトの名無しさん
2018/07/04(水) 22:48:21.01 ID:gFgZc5FG

TJH

165 デフォルトの名無しさん
2018/07/06(金) 12:24:57.09 ID:uTPDH9XV

TJH

166 デフォルトの名無しさん
2018/08/23(木) 09:04:57.51 ID:by5uxKdK

VC9 SP1 Hotfix For The vector Crash
がダウンロードできないのですが、
どなたかアップロードしていただけないでしょうか?
https://blogs.msdn.microsoft.com/vcblog/2008/12/17/vc9-sp1-hotfix-for-the-vectorfunctionft-crash/#9234449

167 デフォルトの名無しさん
2018/09/13(木) 23:46:46.29 ID:MPXnmy/B

起動の仕方で浮動小数点演算に誤差が発生するのだけど、理由が分かる人居ますか?

今のところ、

A. Debugビルドのバイナリをダブルクリックして起動
B. Releaseビルドのバイナリをダブルクリックで起動
C. DebugビルドまたはReleaseビルドでF5で起動

の3種類出来てる。それぞれ微妙な誤差だ。(doubleの下位ビット)
AとBの違いについては諦めていたのだが、(なお両方とも/fp:precise)
実はCもあると気づいてしまった。

なお、バイナリをダブルクリックして起動、それにIDEをアタッチしても結果は変わらない。
それぞれAまたはCが出る。

何かIDEの設定を間違っているのだと思うのだけど…

168 デフォルトの名無しさん
2018/09/14(金) 12:43:29.26 ID:5xDSXwp0

0fillしてないんだろ

169 デフォルトの名無しさん
2018/09/14(金) 13:05:12.93 ID:XcO59d50

再現性は100%なので、初期化のミスではない。(と思っている)

演算途中の結果を double なら16進16桁でテキストにダンプしている。
数値だけではないが500MB程度のファイルが出力され、
diff を取ることによりレグレッションテストをしている。
今のところ、A/B/Cの3種類しか出ない。
初期化忘れならこうはならない。(はず)

170 デフォルトの名無しさん
2018/09/14(金) 13:09:49.07 ID:Qw2nkUqU

MSのエンジニアを信じるか、再現可能なソースも示さず問題だ問題だ言ってるとこの馬の骨とも知れない奴を
信じるかって言われたら迷うことなく前者を信じるw

171 デフォルトの名無しさん
2018/09/14(金) 14:43:10.29 ID:XcO59d50

俺はIDEのバグだとは思っていない。
何かIDEの設定があって、俺がそれを適切にやってないのだと思っている。

色々見た限り、俺は /fp:precise しか発見出来なかった。
ただしこれは一応適切に設定されている。
他にないかな?ということ。

172 デフォルトの名無しさん
2018/09/14(金) 15:49:43.21 ID:cyu8WCuc

IDEじゃなくてコマンドラインからコンパイラで直接コンパイルしても一緒?

173 デフォルトの名無しさん
2018/09/14(金) 16:14:47.18 ID:XcO59d50

どういう意味?
(どれとどれの違いにフォーカスしろと?)

俺はバイナリに問題があるとは思っていない。
何らかの理由で浮動小数点のモードが切り替えられたりしてないかを疑ってる。
だからIDEの設定とか、そっちを見てる。

Release/Debugのバイナリは当たり前だが違ってる。
/O2と/Od等だ。
ただそれでも /fp:precise の場合は
浮動小数点の演算順序を入れ替えない範囲で最適化される事になっている。
逆アセンブラは見たけどちょっとグチャグチャすぎてよく分からなかった。
(見た範囲では演算順序の入れ替えはないように思えた)

174 デフォルトの名無しさん
2018/09/14(金) 16:25:44.73 ID:2giHKuhd

167
double型を使っていても、SSEのXMMレジスタなどを使う場合、昔のfld, fst, fmulなどを使う場合より基本的には精度が落ちる。

丸めの方向も四捨五入、正負どちらかの方向への丸めや切り捨てなどの他、確か、精度を気にしない、なんてオプションもあった気がする。ゲームで使うことを想定しているらしい。

SSE用に最適化を掛けると、速度は上がるが精度は落ちるかも知れない。

175 デフォルトの名無しさん
2018/09/14(金) 17:45:18.51 ID:XcO59d50

174
今の範囲ではSSEは使っていない(はず)
「拡張命令セットを有効にする」は「設定無し」になっている。(多分デフォのまま)
見た目全部x87が出てたし。

やっぱRelease/Debugの違いから攻めろって感じか?
俺もF5起動で結果が異なるってのは全く予想してなかったし。(ただしこちらの問題だろうけど)
演算部分は場合によってはSSEのアセンブラに差し替えるので、
問題になる場合には、Release/Debugの違いはこれで吸収するつもりだった。
(これは1ヶ月後にやるかも)

176 デフォルトの名無しさん
2018/09/14(金) 17:48:23.40 ID:HVgt1gkj

浮動小数点の誤差を考慮に入れてないというイージーな仕様バグですね。

177 デフォルトの名無しさん
2018/09/14(金) 21:39:03.40 ID:fXySkelb

再現するコードをみないとなにもわかるわけがない
低学歴知恵遅れが書くコードなんかなにをやってるか分からないからな

ごちゃごちゃいってないで再現するコードをあげなさい

178 デフォルトの名無しさん
2018/09/15(土) 06:26:55.94 ID:/OsufeBT

月並みな意見だけど、
「症状を再現できる最小のソースと初期データ、それとコンパイル環境」
まで切り詰めてみるのが早道じゃないかな。

ちょくちょく発生する事例なら、解決策を知ってる誰かが教えてくれてるかと。
週末、より多くの人が質問を見ることを期待して待つ手もあるけど。

179 デフォルトの名無しさん
2018/09/15(土) 08:56:57.28 ID:9ZmI9OgI

より基本に立ち返ろう
そもそも誤差はあるのか?

計算結果を何を使ってどう出力しているかだけでもソースを見せてくれ

180 デフォルトの名無しさん
2018/09/15(土) 13:36:34.65 ID:heijdb7v

175
x87でも誤差を丸める方法を fpu control word で設定できる事は出来る。
四捨五入と切り捨てなどを切り替えられる。

181 デフォルトの名無しさん
2018/09/15(土) 13:42:47.95 ID:heijdb7v

fpu control word で、丸め方法と、精度の二つを独立に設定できる。

この精度の設定で、メモリ上の表現がdouble型でも、計算時のfpuの内部精度が変わってくる。

普通は64bit doubleに対して、fpu内部では80bitの精度で計算する。仮数部のbit数は、確か、それぞれ、53BIT、64BITだったかな。

182 デフォルトの名無しさん
2018/09/15(土) 14:05:09.61 ID:heijdb7v

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.

183 デフォルトの名無しさん
2018/09/15(土) 14:14:58.92 ID:heijdb7v

182
書いてある意味は、

「SSEやSSE2だと、float(32BIT)やdouble(64BIT)のまま計算するが、x87 fpuだと、もっと高い精度であるところの
  『double extended-precision floating-point format(拡張倍精度浮動小数点フォーマット:80BIT)』
で計算を実行して、丸めてから、floatやdoubleに戻す。
そのため、SSE/SSE2 と x87 fpuでは結果が変わることがある。
しかし、その場合でも結果の違いは、仮数部の LSB (最も価値の小さいBIT)の1BITにだけ現れる。」

というような事。

184 デフォルトの名無しさん
2018/09/15(土) 16:09:28.75 ID:aC3C7hdp

揚げ足取りだけどLSBを「最も価値が小さい」って直訳はいかがなものかなw
普通に最下位ビットじゃないの?

ところで
> the least-significant bits
これ何で複数形なのかね

185 デフォルトの名無しさん
2018/09/15(土) 16:14:15.89 ID:AVfR6YnT

2の0乗だから実際価値が低い

上はMVBで

186 デフォルトの名無しさん
2018/09/15(土) 17:07:56.98 ID:UR1d6CKz

183
ありがとう。
ただ一応それは知ってて、その上で、IDEの環境設定等を疑っている。

178
とはいえ地道に辿って、同様の再現コードを作ることに成功しそうだ。
もう少し調べて、多分今晩か明日午前中に上げる。

187 デフォルトの名無しさん
2018/09/15(土) 17:12:32.47 ID:heijdb7v

184
「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 という英語になる。

188 デフォルトの名無しさん
2018/09/15(土) 17:15:04.14 ID:heijdb7v

誤:これは、SSE の場合の LSB と、x87 FPU の場合の FPU の2種類を
正:これは、SSE の場合の LSB と、x87 FPU の場合の 2種類を

189 デフォルトの名無しさん
2018/09/15(土) 17:18:55.19 ID:heijdb7v

184
>揚げ足取りだけどLSBを「最も価値が小さい」って直訳はいかがなものかなw
>普通に最下位ビットじゃないの?

整数の場合は、「最下位ビット」というと、本当にBITの位置が一番右にあるようなイメージもある。

一方、浮動小数点数の場合は、右にあるとかより、仮数部において、一番価値の小さいビット、というニュアンスを使えたかった。

IEEEでは、それは確かに一番右にあるビットであって、マシン語レベルの表現では、BIT0ではあるのだが。

ニュアンス的に。

190 デフォルトの名無しさん
2018/09/15(土) 17:29:56.92 ID:aC3C7hdp

187
それは俺も思ったけど、それならsignificandの方も複数じゃないとおかしいような...

191 デフォルトの名無しさん
2018/09/15(土) 20:35:40.44 ID:UR1d6CKz

同様の症状を再現出来るようになったので上げる。
完全再現は出来てないが、使い物にはなるはず。興味がある人はよろしく。

症状:
単独で起動した場合と、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の結果が得られる。

192 デフォルトの名無しさん
2018/09/15(土) 20:37:06.43 ID:UR1d6CKz

ソース:
#include "stdafx.h"
#include
using namespace System;

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
double norm = 0;
for (int i=0;i norm = sqrt(norm);
if (regulate) for (int i=0;i return norm;
}

int main(array ^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;
}

193 デフォルトの名無しさん
2018/09/15(土) 20:42:48.06 ID:UR1d6CKz

オプション等(コマンドライン):(全てデフォのままのはずだが一応)
C/C++:
 /GL /D "WIN32" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MD /Yu"stdafx.h"
/Fp"Release\test_floating_error4.pch" /Fo"Release\\" /Fd"Release\vc90.pdb"
/W3 /nologo /c /Zi /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll"
/FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll"
/FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"
リンカ:
/OUT:"MYPATH\test_floating_error4\Release\test_floating_error4.exe"
/INCREMENTAL:NO /NOLOGO /MANIFEST
/MANIFESTFILE:"Release\test_floating_error4.exe.intermediate.manifest"
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG
/PDB:"MYPATH\test_floating_error4\Release\test_floating_error4.pdb"
/LTCG /DYNAMICBASE /FIXED:No /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT

パスは$MYPATHと書き換えた。また、投稿の為に適宜改行を入れた。
このプロジェクト名は見れば分かるとおりtest_floating_error4。

194 デフォルトの名無しさん
2018/09/15(土) 20:43:03.84 ID:UR1d6CKz

備考2:
なおこの方法で見える calc_norm_and_regulate 関数の『逆アセンブル』結果は
俺の環境での物とコールアドレス以外は一致していることを確認している。
一応、diff結果は以下。
8c8
< 0000000c cmp dword ptr ds:[00752E14h],0
---
> 0000000c cmp dword ptr ds:[007D2E14h],0
10c10
< 00000015 call 676F58B9
---
> 00000015 call 683C58B9
44c44
< 0000006a call FF0455E8
---
> 0000006a call FFD955E8

195 デフォルトの名無しさん
2018/09/16(日) 02:47:43.28 ID:wIV2HUNW

191
C++/CLR では、.Net を使っているから、起動方法が違うだけでも、
fpu control word の値や、使うCPU命令がx87 FPUなのか、SSE
なのかが違ってくる可能性があるかもしれない。

fpu control word は、main()関数に入る前の start up codeの中で
初期化される。

196 デフォルトの名無しさん
2018/09/16(日) 03:19:36.22 ID:wIV2HUNW

192
// Release build
// 0.000000, 0x1ff68ddfb62221dd from IDE
// 0.000000, 0x1ff68ddfb62221de from command prompt

それにしても、随分小さな値だね。ちなみに、浮動小数点表示
の場合の有効数字の桁数を上げたら、どのようになる?
1.xxxe-yy
表示にして。

197 デフォルトの名無しさん
2018/09/16(日) 03:40:33.66 ID:wIV2HUNW

192
試しに、ソースの冒頭に
#include
を追加してから、

Console::Write(String::Format("{0:F6}, 0x{1:x16}\r\n",norm, *(__int64*)&amp;norm));
の部分を、

printf( "%30.30e, 0x%016X\n", norm, *(__int64*)&amp;norm) );

としてみるとどうなる?

198 デフォルトの名無しさん
2018/09/16(日) 03:42:01.82 ID:wIV2HUNW

197
誤: printf( "%30.30e, 0x%016X\n", norm, *(__int64*)&amp;norm) );
正: printf( "%30.30e, 0x%016X\n", norm, *(__int64*)&amp;norm );

199 デフォルトの名無しさん
2018/09/16(日) 07:27:22.50 ID:SOVIz+sV

> 0x1ff68ddfb62221dd(Debug)
> 0x1ff68ddfb62221de(Release)

VS 2010 VC++ Express でも再現した

200 デフォルトの名無しさん
2018/09/16(日) 07:38:10.70 ID:SOVIz+sV

↓このループを抜けたあと、すでにReleaseビルドとDebugビルドでは
 normの値に差異が発生してることが確認できた
for (int i=0;i
↓この下に(ループ内に)fprintf文を入れるだけで
 ReleaseビルドとDebugビルドが同じ実行結果になることが確認できた
norm += (double)r[i] * (double)r[i];

とりあえずまずこれだけは分かったから
低学歴知恵遅れが書いたウンココードの問題箇所を限定する

201 デフォルトの名無しさん
2018/09/16(日) 07:51:03.41 ID:SOVIz+sV

①-1 デフォルト設定(Release)

【コード】

#include "stdafx.h"
#include
#include
#include

int main(array ^args)
{
  __int64 inputs_hex[16] = {
    0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54,
    0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3,
    0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
    0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000
  };
  double* r = (double*)inputs_hex;
  double norm = 0;

  for (int i = 0; i < 16; i++) {
    norm += (double)r[i] * (double)r[i];
//    fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
  }
  fprintf(stdout, "0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
  return 0;
}

202 デフォルトの名無しさん
2018/09/16(日) 07:51:56.62 ID:SOVIz+sV

①-1 デフォルト設定(Release)

↓このコードの逆アセンブルコード
https://ideone.com/Ryyxkl

【実行結果】

0x0007F2C44DFFF8F2:1.1053482540585106e-308

203 デフォルトの名無しさん
2018/09/16(日) 07:53:20.79 ID:SOVIz+sV

①-2 デフォルト設定(Release)

#include "stdafx.h"
#include
#include
#include

int main(array ^args)
{
  __int64 inputs_hex[16] = {
    0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1fedb1530240aa54,
    0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x1ff0af0d95025bc3,
    0x1fc9353df6af376b, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
    0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000
  };
  double* r = (double*)inputs_hex;
  double norm = 0;

  for (int i = 0; i < 16; i++) {
    norm += (double)r[i] * (double)r[i];
    fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
  }
  fprintf(stdout, "0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
  return 0;
}

204 デフォルトの名無しさん
2018/09/16(日) 08:02:12.99 ID:SOVIz+sV

①-2 デフォルト設定(Release)

↓このコードの逆アセンブルコード
https://ideone.com/4j12ib

【実行結果】

↓実行結果を書き込めないからこっちに書き込んどいた
https://ideone.com/gOqtki

0x0007F2C44DFFF8F1:1.1053482540585101e-308

205 デフォルトの名無しさん
2018/09/16(日) 08:05:50.92 ID:SOVIz+sV

②-1 最適化無効 (/Od)(Release)

※ コードは①-1(201)と同じ

↓このコードの逆アセンブルコード
https://ideone.com/cONCAx

【実行結果】

0x0007F2C44DFFF8F1:1.1053482540585101e-308

206 デフォルトの名無しさん
2018/09/16(日) 08:09:59.78 ID:SOVIz+sV

②-2 最適化無効 (/Od)(Release)

※ コードは②-2(203)と同じ

↓このコードの逆アセンブルコード
https://ideone.com/kuRt3w

【実行結果】

※ ①-2(204)と同じ

0x0007F2C44DFFF8F1:1.1053482540585101e-308

207 デフォルトの名無しさん
2018/09/16(日) 08:20:27.67 ID:SOVIz+sV

①-1、①-2の逆アセンブルの出力結果を比較すると原型をとどめてないぐらいグチョグチョに違う(最適化のせいと考えられる)
②-1、②-2の逆アセンブルの出力結果を比較すると差異はほとんどない(②は両方ともまったく最適化されてないから当然)

①-1と②-1の逆アセンブルの出力結果を比較すると原型をとどめてないぐらいグチョグチョに違う(①-1のコード(201)ははげしくウンコ最適化されてると考えられる)
①-2と②-2の逆アセンブルの出力結果を比較すると差異はほとんどない(①-2のコード(203)はあまり最適化されてないと考えられる)

はっきりいって、これ以上見る気もしないしテキトーだが
ウンコみたいな最適化で演算の順序が入れ替わったせいで、誤差が発生しているものと考えられる

208 デフォルトの名無しさん
2018/09/16(日) 08:28:37.25 ID:zL1WUjLu

199以降、
すまん、入れ替わりになるかもしれんが後で確認する。
まず195その他について回答する。

195
SSEは /arch:SSE または /arch:SSE2 でないと出ないことになっており、勿論設定はしていない。
また、逆アセンブル結果では x87 命令のみであるのも確認している。
ただ今回の問題は、本当にReleaseビルドのバイナリを逆アセンブルしているか怪しい事だが。

196
小さい値なのは偶々だ。
辿って行ってそれが1回目にヒットする入力データだっただけのこと。

197
.NETの書式指定はググり難いが以下。
https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings
概ねprintfと同じで、自動的にやってくれるのが増えている。
30桁欲しければ以下。
Console::Write(String::Format("{0:E6}, {0:E30}\r\n",norm));
// 出力は 1.051355E-154, 1.051355436595307800000000000000E-154
なおdoubleは16桁な。(15.9=53*log(10)2)

ただ当たり前だが、書式を変えたところで計算結果は変わらないし、
精度の問題には関係ない。

209 デフォルトの名無しさん
2018/09/16(日) 08:29:03.14 ID:zL1WUjLu

195
FPU control registor については何故か安定した結果を得られていない。
インラインアセンブラは以下の通りで、

#pragma unmanaged
inline void fpu_getcw(unsigned short* cw) {
__asm{
fnstcw [cw];
}
}
#pragma managed

これを norm = calc_norm_and_regulate( ... ) の直前/直後に配置して読み出し、
同様にコンソール出力すると、以下となる。
また、IDEで起動した場合は、「レジスタ」で見れる。
なお定義は以下の通り。
[9:8]に対し、
0x00 : 単精度(24bit)
0x01 : reserved
0x10 : 倍精度(53bit)
0x11 : 拡張倍精度(64bit)
[11:10]に対し
0x00 : 最近値
0x01 : 切り捨て
0x10 : 切り上げ
0x11 : 0方向への切り捨て

210 デフォルトの名無しさん
2018/09/16(日) 08:29:57.53 ID:zL1WUjLu

195
直後のみに配置:
0x027F (倍精度) = Debug(IDE起動)のIDE内表示、Release(IDE起動)のIDE内表示、
0x03a5 (拡張倍精度) = Debug(IDE起動)、Release(IDE起動)、
0x3fdc (拡張倍精度) = Debug(コマンドプロンプト)、
0xf280, 0xf290, 0xf160, 0xf010等、不安定 = Release(コマンドプロンプト)

直前のみに配置:
直後のみと同じ結果。(つまり『何故か』安定している)
Release(コマンドプロンプト)は不安定なのも同じ。

直前と直後に配置:
直前側は当然不安定になる。
直後側は「直後のみ」の結果と同じ。(Release(コマンドプロンプト)は不安定なのも同じ)

雰囲気からすると、IDE内表示は当てにならず、
命令自体は rdtsc と同じで非同期に実行されている雰囲気だが、
rdtsc命令の注意書きにある「シリアル化命令ではない」という但し書きが無く、状況は不明。
正直、正しく読み出せているか怪しい。(あてにならない)
これらから推測すると、暫定的には以下。

拡張倍精度 = Debug(IDE起動)、Release(IDE起動)、Debug(コマンドプロンプト)、
不明 = Release(コマンドプロンプト)


以上が195その他に対する回答。
これから199その他について確認する。

211 デフォルトの名無しさん
2018/09/16(日) 12:52:37.56 ID:haV9TZ8e

210
興味深い結果だ。

212 デフォルトの名無しさん
2018/09/16(日) 13:21:26.16 ID:haV9TZ8e

210
>命令自体は rdtsc と同じで非同期に実行されている雰囲気だが、
>rdtsc命令の注意書きにある「シリアル化命令ではない」という但し書きが無く、状況は不明。
>正直、正しく読み出せているか怪しい。(あてにならない)

インラインアセンブラを使わずに、

_control87(), _controlfp() : Get and set the floating-point control word.

unsigned int _control87( unsigned int new, unsigned int mask );
unsigned int _controlfp( unsigned int new, unsigned int mask );

を使ってみたらどうなる?

213 デフォルトの名無しさん
2018/09/16(日) 13:31:15.50 ID:Q5j4SiHR

win32コンソールなら結果が同じ。 もう理由は分かったのに何が問題なんだ?こんなの何の影響もないだろう。

214 デフォルトの名無しさん
2018/09/16(日) 13:33:14.92 ID:zL1WUjLu

199
再現実験ありがとう。
しかし色々問題がある。

1. 俺は起動方法による違いについてフォーカスしているが、
 君はRelease/Debugの違いにフォーカスしている。
2. VC++2008では再現しない。(VC++2010では再現する)
3. ソース改変しすぎ。それでは意味がない。
4. 207の結論は間違い。

まず問題なのはソースの改変だ。
ループ回数を16回と決め打ちしたことで 8*2 に展開されている。
その結果、元のソース(俺が遭遇した状況)では発生しえないことが発生している。
これでは意味がない。

そして、君の結論は間違いだ。
× > ウンコみたいな最適化で演算の順序が入れ替わったせいで、誤差が発生しているものと考えられる
逆アセンブルを追えば分かるが、演算順序は入れ替わっていない。
原因は、Debugでは fld/fmul/fadd/fstp と毎回64bitに整形されるのに対し、
Releaseでは (fld/fmul/fadd)*8 + fstp と整形が8回に1回と減り、
8回は80bit(拡張倍精度)で演算されるからだ。
(こうなったのは君が16回ループ決め打ちコードに改変したから)
ただしIDE上の fpu control registor の値は 相変わらず0x027F(倍精度)となっており、
IDEのこの表示が当てにならない事は分かる。

なおVC++2008では再現しなかった。
俺の環境では、16回決め打ちコードでも 8*2 に展開されず、Debugと同じコードだからだ。
勿論結果も同じだった。

215 デフォルトの名無しさん
2018/09/16(日) 13:33:48.22 ID:zL1WUjLu

199
問題は、俺の環境で俺が提供したコード192だと、
同様に展開されないにも関わらず、『起動方法によって』結果が異なってしまう点だ。
俺の環境でのRelease/Debugの逆アセンブル結果のdiffは以下。
17c17
< 0000000c cmp dword ptr ds:[001C2E14h],0
---
> 0000000c cmp dword ptr ds:[00702E14h],0
19c19
< 00000015 call 68302BA9
---
> 00000015 call 683A5AB1
93c93
< 0000015a call FF6C3098
---
> 0000015a call FFCA57E8
98c98
< 0000016f push 0B5311Ch
---
> 0000016f push 0D03188h
104,105c104,105
< 00000183 push 4F9D68h
< 00000188 call FF6C30A4
---
> 00000183 push 2B71C0h
> 00000188 call FFCA57F4
アドレスの変更だけであり、君の結果
「ループ回数を決め打ちしたことによりアンローリングされ、一部の演算がx87精度で計算される」には該当しない。
そして、この状況でも結果が異なってしまうことが問題なのだ。

君は君が勝手に新しく作り込んだ問題に対し、間違った結論でお茶を濁したにすぎない。
君が知っているFPU関連のことはこちらも知っている上で、質問している。

216 デフォルトの名無しさん
2018/09/16(日) 13:53:17.67 ID:haV9TZ8e

214
なるほど、全く別の2つの理由で、精度が変わっている可能性(というより多分、確実)があると。

それは以下の2つ:

1. Debug版とRelease版では、最適化の結果、x87 FPU命令の使われ方が変わる。
  x87では、メモリに書き戻さずに st(0)~st(7)レジスタに入っている途中では、
 拡張倍精度の80BITで計算されるが、書き戻すとdoubleの場合でも64BITに丸め
 られる。なるべくメモリに書き戻さずにレジスタった方が高速なので、Release版
 では、80BITで計算される「期間」が多くなる。そのため、Debug版とRelese版では
 結果が僅かに違ってくる。

2. fpu control word が違っていて、st(0)~st(7)に入っていても、計算が
 80BITか、64BIT、32BITのどれで計算されるか異なったり、丸め方が四捨五入
 か、正負二種類の方向の切り捨てなどが変わっている。


そして、IDEから起動した場合と、コマンドラインから起動した場合で結果が違う
のは、「2.」の理由によるものではないかと。そして、実際に、インラインアセンブラ
で fpu control word を読み取ってみると、不安定な値が読み出されたと。

217 デフォルトの名無しさん
2018/09/16(日) 13:58:15.86 ID:haV9TZ8e

まず、
__asm{
 fnstcw [cw];
}
ではなく、_control87() を使ってみて欲しい。

インラインアセンブラは、独立した *.asm で書くより危険な場合が
あるかも知れないので。特にC関数の引数、今の場合は、「cw」を
インライン・アセンブラで用いた場合、正しいコードが出ているかどうか
は注意が必要。

218 デフォルトの名無しさん
2018/09/16(日) 14:05:28.41 ID:haV9TZ8e

209
よく見ると、それは、かなり複雑な事情が絡みそうなコード。
以下のようにした方が安心。なお、「cw」という短すぎる引数名
も長年のプログラミング経験からすると、インラインアセンブラでは
怖い。また、

TTTT reg,引数名

TTTT 引数名
は大丈夫でも、
TTTT reg,[引数名]

TTTT [引数名]
は1命令では不可能な事をコンパイラに指示している事になるので
ちょっと怖い。間接の間接、つまり、[[ebp+8]]みたいな事を要求
しているが、そんなオペランドが使えるアセンブリ命令はx86/x64
では存在しないので。


#pragma unmanaged
inline void fpu_getcw(unsigned short *pCW) {
 __asm{
  mov edx,pCW
  fnstcw [edx];
 }
}
#pragma managed

219 デフォルトの名無しさん
2018/09/16(日) 14:17:40.34 ID:haV9TZ8e

あ、後、インライン・アセンブラで実験する場合は、関数名の inline は
「取った」方がいい。つまり、以下の方が安心:

#pragma unmanaged
void fpu_getcw(unsigned short *pCW) {
 __asm{
  mov edx,pCW
  fnstcw [edx];
 }
}
#pragma managed

220 デフォルトの名無しさん
2018/09/16(日) 15:23:18.78 ID:h8nMbN0G

また基本に戻るが、193で/MDになってるので
/MTや/MTdでも発生するかしてみた方がいい

221 デフォルトの名無しさん
2018/09/16(日) 15:37:02.44 ID:Q5j4SiHR

.netはx87コンテキストをすべて保持しませんって分かったんだからもう十分。
win32かx64にすれば解決。そもそも問題になる仕様バグじゃない。

222 デフォルトの名無しさん
2018/09/16(日) 15:40:56.17 ID:haV9TZ8e

220
ホントだ。/MDだと、Runtime Library として DLL のものを使ってしまう。
これは、今回の現象に非常に重要な影響を与えているかも知れない。

223 デフォルトの名無しさん
2018/09/16(日) 15:42:36.82 ID:haV9TZ8e

221
いや、まだまだ興味深い。
ここで終わらせずにもっと徹底して追及すべきだ。

224 デフォルトの名無しさん
2018/09/16(日) 15:48:45.63 ID:zL1WUjLu

212
それはどうやらclrでは使えないらしい。
> These functions are ignored when you use /clr (Common Language Runtime Compilation) or /clr:pure to compile
> because the common language runtime (CLR) only supports the default floating-point precision.
> https://msdn.microsoft.com/en-us/library/e9b52ceh.aspx

とはいえ無理矢理やってみた。警告は出るがコンパイルは通る。
結果は、どこに置いても、Debug/Releaseでも、常に 0x9001f が読み出される。
ただし、これは上記の仕様からして、当てにならない。

225 デフォルトの名無しさん
2018/09/16(日) 15:49:44.99 ID:zL1WUjLu

219
218のコードで試してみた結果、209で言った不安定さはなくなり、
全てにおいて 0x027f が安定して読み出せるようになった。

ただしその過程で気づいたが、
IDEから起動した場合はReleaseビルドであっても、「未初期化のスタック値」も0x00が読み出せるようだ。
どうやらこれが原因の可能性が出てきた。(はっきり言って俺のバグだが)

コードは以下の通りだが、
unsigned short fpu_cw, fpu_cw_after;
// fpu_getcw(&amp;fpu_cw);
double norm = calc_norm_and_regulate(count, inputs, false);
fpu_getcw(&amp;fpu_cw_after);
Console::Write(String::Format("{0:D}, 0x{0:x4}\r\n",fpu_cw));
Console::Write(String::Format("{0:D}, 0x{0:x4}\r\n",fpu_cw_after));
読み出しと書き出し(Console::Write)を両方ともコメントアウトするのが面倒なので、
色々試す際、読み出しだけコメントアウトし、不定を表示させて脳内で省略していたのだが、
IDEから起動した場合はReleaseビルドであっても必ず0x0000が表示される事に気づいた。

上記『初期化していない』 fpu_cw を
Releaseビルドをコマンドプロンプトから実行: 不定
ReleaseビルドをIDEから実行: 常に0x0000
となる。
実行前にあらかじめスタック領域を0fillでもしているのか?
まあこれに当たっているのなら確実に俺のバグだし、これなら辻褄は合ってしまうのだが。

226 デフォルトの名無しさん
2018/09/16(日) 15:51:01.50 ID:zL1WUjLu

219
なお、逆アセンブルでコードバイトを表示させて確かめることは出来る。
正しいコードは出ている。(ただし不安定)
inline void fpu_getcw(unsigned short* cw) {
00DA1540 55 push ebp
00DA1541 8B EC mov ebp,esp
__asm{
fnstcw [cw];
00DA1543 D9 7D 08 fnstcw word ptr [cw]
}
}
00DA1546 5D pop ebp
00DA1547 C3 ret

fnstcwは D9 /7 で 7D なら [EBP+disp8] となり、 7D 08 は [EBP+08] となる。
つまりスタックポインタ+8の領域に書き戻せ、となる。
[ebp+0]は元のebpが入っているから、(pushしているので)
[ebp+4]にcallの戻り値アドレス
[ebp+8]にcw(第一引数)が入っていることになる。
これは正しいコードだ。
しかし再度試したが、確かに不安定だ。何故かは分からん。
inline取ってみても不安定のまま。

> そんなオペランドが使えるアセンブリ命令はx86/x64
> では存在しないので。
正直、/7の意味が分からないのだが、説明は
> /digit - 0 から7 までの数字で、命令のModR/M バイトがr/m(レジスタまたはメモリ)オペランドだけを使用することを示す。
> reg フィールドには、命令のオペコードを拡張する数字が入っている。(Intelのマニュアルより)
となっているのだが、これはどういう意味だ?
ModR/Mバイトが全部使えるとすると [ebp+disp8]出来ることになる。そしてそのコードは出ている。
ただし、動作は怪しいのも事実。
ModR/Mの一部しか使えない、ということか?

227 デフォルトの名無しさん
2018/09/16(日) 15:51:25.16 ID:zL1WUjLu

219
218のコードだと、
00381002 EC in al,dx
__asm{
mov edx,pCW
00381003 8B 55 08 mov edx,dword ptr [pCW]
fnstcw [edx];
00381006 D9 3A fnstcw word ptr [edx]
}
}
00381008 5D pop ebp
00381009 C3 ret

D9 3A ならまんま fnstcw [edx] だ。
理由は分からんがこちらだと安定しているので、結果としてはこのやり方が正しい。

228 デフォルトの名無しさん
2018/09/16(日) 16:02:47.64 ID:haV9TZ8e

226
をを。やはり、ある意味ではVCが間違ったアセンブリコードを出していたよ。
それだと、
fnstcw [EBP+08]
という意味になってしまって、
fnstcw pCW
の意味になっている。つまり:
pCW = control_word;
あなたが、やりたいのは、
*pCW = control_word;
だったのだから、アセンブリ・コードが間違ってる。

あなたが指示したのは、
fnstcw [pCW]
だった。実際に生成されたコードは、
fnstcw pCW
だった。

VC のインラインアセンブラは、エラーも出さずに間違ったコードを
出すことが証明された。

これと、精度が不安定な問題とは全く別ではあるけれど。

229 デフォルトの名無しさん
2018/09/16(日) 16:06:05.39 ID:zL1WUjLu

すまん、間違いの修正

225
× > どうやらこれが原因の可能性が出てきた。(はっきり言って俺のバグだが)
× > まあこれに当たっているのなら確実に俺のバグだし、これなら辻褄は合ってしまうのだが。

今回は俺はあくまで俺の本番コードのデバッグを念頭に置いていて、この発言だった。
ただし192の再現コードで『不定スタック領域』を掴んでいるわけもなく、
一応IDE起動とコマンドプロンプト起動での挙動の違いを再現出来ているわけだから、
これだけが問題ではないのも事実だ。

俺にとっては一つ新しい知見として、
・IDEから起動した場合、スタックが初期化されるっぽい
ということが分かった。とはいえOSは0fillしてから各プロセスにメモリを与えるので、実際は、
・コマンドプロンプト起動ならmain前に設定した続きでそのまま実行、
・IDE起動ならmain前に色々やって0fillして実行、
 或いはmain前に色々やることが多く、スタックが進み、(例えばデバッガをアタッチする為)
 結果的にOSが初期化済みの領域から始動
となって違いが発生するというところか。

230 デフォルトの名無しさん
2018/09/16(日) 16:11:52.18 ID:haV9TZ8e

226
>正直、/7の意味が分からないのだが、
ModRM とは、

mod reg r/m
76 543 210

のようなオペランドを指しているのだけど、/7 は、regの部分を2進数の111、
10進数の「7」にするという意味。このタイプのマシン語は、
mod ttt r/m
とも書かれる。tttの部分は、命令の主幹部分(ニモニック部分)によって変わる。
普通は、レジスタ番号を入れるところに、命令の種類を表す3BITの値を入れる
仕様になっている。

あなたがインラインアセンブラでVCに出させたかったコードは、意味的には、

fnstcw [[EBP+08]]

なのだが、[ ] を二重にしたようなそんなx86/x64命令は存在しないので
VC がエラーも出さずに勝手に一重の
fnstcw [EBP+08]
にしてしまった、という事。本当は、

mov edx,[EBP+08]
fnstcw [edx]

というコードにしなくてはならなかったのに、VCがある意味では間違った。
これが、単独の *.asm ではなく、VC の asm {・・・} が危険な理由。
VC の asm は特に危険。

231 デフォルトの名無しさん
2018/09/16(日) 16:17:02.07 ID:haV9TZ8e

229
>ただし192の再現コードで『不定スタック領域』を掴んでいるわけもなく、
>一応IDE起動とコマンドプロンプト起動での挙動の違いを再現出来ているわけだから、
>これだけが問題ではないのも事実だ。

そうだよ。精度が変わるのはあなたの間違いではない。スタック領域が0クリア
されようがれまいが、あなたのコード自体には特に不安定さはない。
非初期化領域を参照しているコードは見当たらないし。

232 デフォルトの名無しさん
2018/09/16(日) 16:20:22.27 ID:haV9TZ8e

逆アセンブラ結果を見てないで言うけど、もし、sqrt() が call文で関数呼び出し
されているんだったら、そこで精度の違いが出てるかもしれない。

233 デフォルトの名無しさん
2018/09/16(日) 16:23:20.75 ID:zL1WUjLu

228
なるほど、了解した。
つまり、210は全面的に間違いで、正しくは、

・fpu control register は 0x027F で、IDEからも正しく読めている

だな。


俺がやるべきだったのは fnstcw [[cw]] なのだと思うが、これはSyntaxErrorだ。
そして、こんな命令はないから、
[]内に変数を書かず、レジスタ名にしろ、ということだったのだな。
全くもって了解だ。

VCの問題ではなくて、
俺が fnstcw [cw] と書いたのが間違いで、それをそのままコードにされてしまっただけだな。
正しく書けばSyntaxErrorだったのだし。
なお fnstcw [*cw] もSyntaxErrorだ。手動で一旦レジスタに移さないと駄目だな。
全くもって219のコードが正しい。

234 デフォルトの名無しさん
2018/09/16(日) 16:35:08.59 ID:LrdaMWHl

233
>俺がやるべきだったのは fnstcw [[cw]] なのだと思うが、これはSyntaxErrorだ。

ちょっと違う。あなたはやるべきことをちゃんと正しく、
fnstcw [cw]
と書いた。しかし、cw=[ebp+8]なので、これは、
fnstcw [[ebp+8]]
という「意味」になる。でも、x86/x64のマシン語にはこんな[ ]を二重にした
オペランドは存在しないので、VCが無断で勝手に[ ]を一重にして、
fnstcw [ebp+8]
に改変してしまった。

**(ebp+8) = control_word;

としなくてはならないのに、VCが勝手に、
*(ebp+8) = control_word;

としたということ。

235 デフォルトの名無しさん
2018/09/16(日) 16:36:04.13 ID:zL1WUjLu

230-231
了解だ。ありがとう。

232
その部分の逆アセンブラは以下の通り。
普通にcallされている。(行数オーバーなので切るが)

ただし、
> そこで精度の違いが出てるかもしれない
との繋がりがよくからない。
sqrt()でcallされると、スタックが改変される。おそらくデータ依存か?
なら未初期化のスタックを掴みに行っているコードが有ればバグる。
ただし今回の『再現コード』はこの限りではない。
(俺の本番コードはさておき)

236 デフォルトの名無しさん
2018/09/16(日) 16:37:19.30 ID:zL1WUjLu

232
逆アセンブラ

for (int i=0;i 00000033 33 D2 xor edx,edx
00000035 89 55 E8 mov dword ptr [ebp-18h],edx
00000038 90 nop
00000039 EB 03 jmp 0000003E
0000003b FF 45 E8 inc dword ptr [ebp-18h]
0000003e 8B 45 E8 mov eax,dword ptr [ebp-18h]
00000041 3B 45 FC cmp eax,dword ptr [ebp-4]
00000044 7D 1B jge 00000061
00000046 8B 45 F8 mov eax,dword ptr [ebp-8]
00000049 8B 55 E8 mov edx,dword ptr [ebp-18h]
0000004c DD 04 D0 fld qword ptr [eax+edx*8]
0000004f 8B 45 F8 mov eax,dword ptr [ebp-8]
00000052 8B 55 E8 mov edx,dword ptr [ebp-18h]
00000055 DC 0C D0 fmul qword ptr [eax+edx*8]
00000058 DC 45 F0 fadd qword ptr [ebp-10h]
0000005b DD 5D F0 fstp qword ptr [ebp-10h]
0000005e 90 nop
0000005f EB DA jmp 0000003B
norm = sqrt(norm);
00000061 DD 45 F0 fld qword ptr [ebp-10h]
00000064 83 EC 08 sub esp,8
00000067 DD 1C 24 fstp qword ptr [esp]
0000006a E8 0D 50 7B FF call FF7B507C
0000006f DD 5D D8 fstp qword ptr [ebp-28h]
00000072 DD 45 D8 fld qword ptr [ebp-28h]
00000075 DD 5D F0 fstp qword ptr [ebp-10h]

237 デフォルトの名無しさん
2018/09/16(日) 16:37:34.94 ID:zL1WUjLu

232
逆アセンブラ(続き)

if (regulate) for (int i=0;i 00000078 0F B6 45 08 movzx eax,byte ptr [ebp+8]
0000007c 85 C0 test eax,eax
0000007e 74 25 je 000000A5
00000080 33 D2 xor edx,edx
00000082 89 55 EC mov dword ptr [ebp-14h],edx
00000085 90 nop
00000086 EB 03 jmp 0000008B
00000088 FF 45 EC inc dword ptr [ebp-14h]
0000008b 8B 45 EC mov eax,dword ptr [ebp-14h]
0000008e 3B 45 FC cmp eax,dword ptr [ebp-4]
00000091 7D 12 jge 000000A5
00000093 8B 45 F8 mov eax,dword ptr [ebp-8]
00000096 8B 55 EC mov edx,dword ptr [ebp-14h]
00000099 DD 45 F0 fld qword ptr [ebp-10h]
0000009c DC 3C D0 fdivr qword ptr [eax+edx*8]
0000009f DD 1C D0 fstp qword ptr [eax+edx*8]
000000a2 90 nop
000000a3 EB E3 jmp 00000088
return norm;
000000a5 DD 45 F0 fld qword ptr [ebp-10h]
000000a8 DD 5D E0 fstp qword ptr [ebp-20h]

238 デフォルトの名無しさん
2018/09/16(日) 16:40:36.14 ID:LrdaMWHl

235
よく見ると、最小(?)の実験コードでは sqrt() が使われていなかった。
スマン。

239 デフォルトの名無しさん
2018/09/16(日) 16:42:54.99 ID:zL1WUjLu

234
ああ、なるほど、了解。

240 デフォルトの名無しさん
2018/09/16(日) 16:49:54.65 ID:zL1WUjLu

238
いや、俺が提供した192のソースなら使われてるぞ。
201のソースでは使われてないが。

ただまあ、彼(200)がsqrtを落としたのも分からなくはない。
誤差が生じる=通常は桁落ちだから、この場合は当然積和部分が怪しい。
あらかじめ彼はそうなると分かっていてそれを落とし、予定調和的な結論にたどり着いてしまった。
それが彼の間違いだった、ということ。

俺は出来るだけ元のソースのままで追跡しようとしている。
元のソースの該当ケースと離れてしまっては意味がないから。
そして元ソースではsqrtを使っている。

241 デフォルトの名無しさん
2018/09/16(日) 16:53:58.12 ID:/oSJzlqn

たぶん2008の最適化ミスだと思う。
static double norm = 0;// ←"static"を追加する
にするとか、最適化オプションをいじると
Release/コマンドプロンプトからの起動でも
0x1ff68ddfb62221ddになる

242 デフォルトの名無しさん
2018/09/16(日) 16:54:10.71 ID:LrdaMWHl

238
ああ。また訂正。

sqrt()が使われていないのは、201, 202, 203, 204 の場合で、
それは、ループ内にfprintf()を入れた場合と入れない場合とで、
x87 fpuレジスタのst(0)~st(7)を使う「期間」が変わるために 80BITから
64BITへの書き戻し丸めの問題のために精度が変わっているだけだった。

一方、あなたが指摘した 192 では、ちゃんと sqrt() 関数が使われていて、
それだと、IDEからの起動とコマンド・プロンプトからの起動とで、精度が変
わってくると。そして、その場合の逆アセンブル結果は 236 のように
sqrt() 関数がその場で x87 fpu の fsqrt 命令を使わずに、call 文によって
実際に本当のサブ・ルーチンを呼び出していると。

これはとても興味深い。そのサブ・ルーチンの中が、時と場合によって
精度が変わってくるような書き方をされている可能性が見えてきた。

243 デフォルトの名無しさん
2018/09/16(日) 16:56:42.67 ID:LrdaMWHl

240
>いや、俺が提供した192のソースなら使われてるぞ。
> 201のソースでは使われてないが。

了解。

問題を切り分けるため、sqrt() を使わなかった場合の Release版での、
IDE起動とコマンドrライン起動の精度の違いを実験してみて欲しい。

244 デフォルトの名無しさん
2018/09/16(日) 17:02:35.56 ID:LrdaMWHl

ちょっとしばらく、ここを離れる。

245 デフォルトの名無しさん
2018/09/16(日) 17:22:07.21 ID:zL1WUjLu

241
現象確認した。こちらでも再現した。
逆アセンブルは、以下。(肝心のループ部分は次レス内)

正直、fld/fmul/fadd/fstpのループ部分は変わらず、
normのアドレスが [ebp-10h](つまりローカル)から
ds:[00A4AD40h](つまりグローバル)に変わっただけであり、
これで結果が変わるのはかなり奇妙な気もするが、何か見落としがあるのかも。

241逆アセンブル(static付加版)
template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
static double norm = 0;
for (int i=0;i 00000000 55 push ebp
00000001 8B EC mov ebp,esp
00000003 83 EC 20 sub esp,20h
00000006 89 4D FC mov dword ptr [ebp-4],ecx
00000009 89 55 F8 mov dword ptr [ebp-8],edx
0000000c 83 3D 14 2E 38 00 00 cmp dword ptr ds:[00382E14h],0
00000013 74 05 je 0000001A
00000015 E8 FF 52 30 68 call 68305319
0000001a 33 D2 xor edx,edx
0000001c 89 55 F0 mov dword ptr [ebp-10h],edx
0000001f 33 D2 xor edx,edx
00000021 89 55 F4 mov dword ptr [ebp-0Ch],edx
00000024 D9 EE fldz
00000026 DD 5D E8 fstp qword ptr [ebp-18h]
00000029 33 D2 xor edx,edx
0000002b 89 55 F0 mov dword ptr [ebp-10h],edx
0000002e 90 nop
0000002f EB 03 jmp 00000034

246 デフォルトの名無しさん
2018/09/16(日) 17:22:29.32 ID:zL1WUjLu

241逆アセンブル(続き)(static付加版)

00000031 FF 45 F0 inc dword ptr [ebp-10h]
00000034 8B 45 F0 mov eax,dword ptr [ebp-10h]
00000037 3B 45 FC cmp eax,dword ptr [ebp-4]
0000003a 7D 21 jge 0000005D
0000003c 8B 45 F8 mov eax,dword ptr [ebp-8]
0000003f 8B 55 F0 mov edx,dword ptr [ebp-10h]
00000042 DD 04 D0 fld qword ptr [eax+edx*8]
00000045 8B 45 F8 mov eax,dword ptr [ebp-8]
00000048 8B 55 F0 mov edx,dword ptr [ebp-10h]
0000004b DC 0C D0 fmul qword ptr [eax+edx*8]
0000004e DC 05 40 AD A4 00 fadd qword ptr ds:[00A4AD40h]
00000054 DD 1D 40 AD A4 00 fstp qword ptr ds:[00A4AD40h]
0000005a 90 nop
0000005b EB D4 jmp 00000031
norm = sqrt(norm);
0000005d DD 05 40 AD A4 00 fld qword ptr ds:[00A4AD40h]
00000063 83 EC 08 sub esp,8
00000066 DD 1C 24 fstp qword ptr [esp]
00000069 E8 0E 50 88 FF call FF88507C
0000006e DD 5D E0 fstp qword ptr [ebp-20h]
00000071 DD 45 E0 fld qword ptr [ebp-20h]
00000074 DD 1D 40 AD A4 00 fstp qword ptr ds:[00A4AD40h]

247 デフォルトの名無しさん
2018/09/16(日) 17:22:46.06 ID:zL1WUjLu

241逆アセンブル(続き)(static付加版)
if (regulate) for (int i=0;i 0000007a 0F B6 45 08 movzx eax,byte ptr [ebp+8]
0000007e 85 C0 test eax,eax
00000080 74 28 je 000000AA
00000082 33 D2 xor edx,edx
00000084 89 55 F4 mov dword ptr [ebp-0Ch],edx
00000087 90 nop
00000088 EB 03 jmp 0000008D
0000008a FF 45 F4 inc dword ptr [ebp-0Ch]
0000008d 8B 45 F4 mov eax,dword ptr [ebp-0Ch]
00000090 3B 45 FC cmp eax,dword ptr [ebp-4]
00000093 7D 15 jge 000000AA
00000095 8B 45 F8 mov eax,dword ptr [ebp-8]
00000098 8B 55 F4 mov edx,dword ptr [ebp-0Ch]
0000009b DD 05 40 AD A4 00 fld qword ptr ds:[00A4AD40h]
000000a1 DC 3C D0 fdivr qword ptr [eax+edx*8]
000000a4 DD 1C D0 fstp qword ptr [eax+edx*8]
000000a7 90 nop
000000a8 EB E0 jmp 0000008A
return norm;
000000aa DD 05 40 AD A4 00 fld qword ptr ds:[00A4AD40h]
000000b0 DD 5D E8 fstp qword ptr [ebp-18h]
}
000000b3 DD 45 E8 fld qword ptr [ebp-18h]
000000b6 8B E5 mov esp,ebp
000000b8 5D pop ebp
000000b9 C2 04 00 ret 4

248 デフォルトの名無しさん
2018/09/16(日) 17:35:35.70 ID:zL1WUjLu

243
まだ異なった出力が得られた。
この意味では200がsqrtを外した判断は正しかった。
(彼はそこからさらにループ回数を固定してしまったのが間違いだった)

191ソースを以下に変更した。(sqrtをコメントアウト)
ついでに Console::Write(String::Format("{0:E6}, {0:E30}\r\n",norm)); の出力も付けておく。

ソース:
template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
double norm = 0;
for (int i=0;i // norm = sqrt(norm);
if (regulate) for (int i=0;i return norm;
}

結果:(Releaseビルド/コマンドプロンプトからの起動)
0.000000, 0x0007f2c44dfff8f2
1.105348E-308, 1.105348254058510600000000000000E-308

結果:(Releaseビルド/IDEからの起動、Debugビルドは起動方法によらずこちら)
0.000000, 0x0007f2c44dfff8f1
1.105348E-308, 1.105348254058510100000000000000E-308


244
了解。いずれにしても助かってる。
こちらも後30分くらいでちょっと離れる予定。

249 デフォルトの名無しさん
2018/09/16(日) 18:30:34.19 ID:HF0YmRsW

213
ほんそれ

250 デフォルトの名無しさん
2018/09/16(日) 20:54:27.39 ID:zL1WUjLu

241
さて再見したが、やはりstaticだけで直る理由は分からない。
なお、最適化ミスの場合は、逆アセンブラを読めば分かる。
今のところそれではない。

一応、192ソースのtemplate部の逆アセンブルを上げておく。(ただし重複するので頭のみ)
頭はこれ。続きが236,237。

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
double norm = 0;
00000000 55 push ebp
00000001 8B EC mov ebp,esp
00000003 83 EC 28 sub esp,28h
00000006 89 4D FC mov dword ptr [ebp-4],ecx
00000009 89 55 F8 mov dword ptr [ebp-8],edx
0000000c 83 3D 14 2E 76 00 00 cmp dword ptr ds:[00762E14h],0
00000013 74 05 je 0000001A
00000015 E8 FF 52 1B 68 call 681B5319
0000001a 33 D2 xor edx,edx
0000001c 89 55 E8 mov dword ptr [ebp-18h],edx
0000001f 33 D2 xor edx,edx
00000021 89 55 EC mov dword ptr [ebp-14h],edx
00000024 D9 EE fldz
00000026 DD 5D F0 fstp qword ptr [ebp-10h]
00000029 D9 EE fldz
0000002b DD 5D E0 fstp qword ptr [ebp-20h]
0000002e D9 EE fldz
00000030 DD 5D F0 fstp qword ptr [ebp-10h]

251 デフォルトの名無しさん
2018/09/16(日) 21:25:23.90 ID:zL1WUjLu

220
222
/MTと/clrは同時に指定出来ないらしい。(error D8016)
/MTdも同じく無理。

もう一つ /MDd ってのがあるから試してみた。

/MDdの結果:
Releaseビルドでコマンドプロンプト起動の時のみ ****de、
ReleaseビルドでIDEからの起動だと ***dd。(Debugビルドは起動方法を問わずこっち)
(/MDと全く挙動は同じ)


これで有効な指摘については全て回答してるかな?
見落としが有れば指摘よろしく。
(規制に引っかかったので遅くなってすまん)


今のところ、可能性があるのは以下か?

・Releaseビルドをコマンドプロンプトから起動したときのみなぜか精度が高い
 (201から結果的に検出された。今のところ精度が高いときと同じ挙動をしている為)
・ReleaseビルドもIDEから起動すれば結果的にスタックが0初期化されている状態になっており、
 俺の本番プログラムに関してはここに当たるバグがある?(229)
 (ただしこれは192には該当しない)

252 240
2018/09/16(日) 21:43:04.47 ID:/oSJzlqn

.netの場合、デバッガ配下では(デバッグのため)違うコードを実行しているような気がする。
デバッガの逆アセンブル表示とかasm出力はあまり当てにならないような気もする。
ループ部分だけど、レジスタのみで処理するか、メモリを使用するかで精度が変わるのかも。
そもそも、どっちが正しいのかよくわからんけど...
ループ部分の関数を#pragma unmanagedすると結果が変わるでそれが正しいのかも。

253 240
2018/09/16(日) 21:43:27.78 ID:/oSJzlqn

static版
0000000e 33 C0 xor eax,eax
00000010 85 F6 test esi,esi
00000012 7E 16 jle 0000002A
00000014 DD 04 C7 fld qword ptr [edi+eax*8]
00000017 DC C8 fmul st(0),st
00000019 DC 05 00 30 CC 00 fadd qword ptr ds:[00CC3000h]
0000001f DD 1D 00 30 CC 00 fstp qword ptr ds:[00CC3000h]
00000025 40 inc eax
00000026 3B C6 cmp eax,esi
00000028 7C EA jl 00000014
0000002a DD 05 00 30 CC 00 fld qword ptr ds:[00CC3000h]

非static版
0000000e D9 EE fldz
00000010 33 C0 xor eax,eax
00000012 85 F6 test esi,esi
00000014 7E 0C jle 00000022
00000016 DD 04 C7 fld qword ptr [edi+eax*8]
00000019 DC C8 fmul st(0),st
0000001b DE C1 faddp st(1),st
0000001d 40 inc eax
0000001e 3B C6 cmp eax,esi
00000020 7C F4 jl 00000016

254 デフォルトの名無しさん
2018/09/16(日) 22:27:34.58 ID:zL1WUjLu

252
とりあえず落ち着け。一つずつ行こう。

> ループ部分の関数を#pragma unmanagedすると結果が変わるでそれが正しいのかも。
こちらでも確認した。
calc_norm_and_regulateをunmanaged関数にすると、違いはなくなる。
(Releaseビルドの`をコマンドプロンプトで起動した際にも、****ddの結果となる)

ただしこちらの逆アセンブル結果は以下だ。(fld/fmul/fadd/fstpであることに注意)
for (int i=0;i 0007272C C7 45 F4 00 00 00 00 mov dword ptr [i],0
00072733 EB 09 jmp `anonymous namespace'::calc_norm_and_regulate+1Eh (7273Eh)
00072735 8B 45 F4 mov eax,dword ptr [i]
00072738 83 C0 01 add eax,1
0007273B 89 45 F4 mov dword ptr [i],eax
0007273E 8B 4D F4 mov ecx,dword ptr [i]
00072741 3B 4D 08 cmp ecx,dword ptr [num]
00072744 7D 1A jge `anonymous namespace'::calc_norm_and_regulate+40h (72760h)
00072746 8B 55 F4 mov edx,dword ptr [i]
00072749 8B 45 0C mov eax,dword ptr [r]
0007274C 8B 4D F4 mov ecx,dword ptr [i]
0007274F 8B 75 0C mov esi,dword ptr [r]
00072752 DD 04 D0 fld qword ptr [eax+edx*8]
00072755 DC 0C CE fmul qword ptr [esi+ecx*8]
00072758 DC 45 F8 fadd qword ptr [norm]
0007275B DD 5D F8 fstp qword ptr [norm]
0007275E EB D5 jmp `anonymous namespace'::calc_norm_and_regulate+15h (72735h)

255 デフォルトの名無しさん
2018/09/16(日) 22:33:32.07 ID:zL1WUjLu

253
そちらの逆アセンブルは以下の違いが出てるだろ。
static版: fld/fmul/fadd/fstp
非static版: fld/fmul/faddp (fstpが無い)
この非static版の場合、拡張倍精度(80bit)で演算されるから精度が高いことになり、
static版との演算結果に違いが出るのも仕様通りなんだよ。(これは201と同じ間違い)

一応、fstpにも80bit版はあって、Intelのマニュアルによると以下。
> オペコード命令説明
> D9 /2 FST m32fp ST(0) をm32fp にコピーする。
> DD /2 FST m64fp ST(0) をm64fp にコピーする。
> DD D0+i FST ST(i) ST(0) をST(i) にコピーする。
> D9 /3 FSTP m32fp ST(0) をm32fp にコピーし、レジスタスタックをポップする。
> DD /3 FSTP m64fp ST(0) をm64fp にコピーし、レジスタスタックをポップする。
> DB /7 FSTP m80fp ST(0) をm80fp にコピーし、レジスタスタックをポップする。
> DD D8+i FSTP ST(i) ST(0) をST(i) にコピーし、レジスタスタックをポップする。
つまり君のstatic版
> 0000001f DD 1D 00 30 CC 00 fstp qword ptr ds:[00CC3000h]
では FSTP /3 m64fp [disp32] であり、そこで64bit(倍精度)に丸められてる。
だからレジスタ(80bit=拡張倍精度)で演算される非static版と結果が異なる。
static版のsftpが DB /7 m80fp なら誤差は出ないはずなんだよ。(Cでどう書くのかは知らん)

だから253の場合の誤差なら、仕様通りなんだよ。(片方が倍精度、もう片方は拡張倍精度)
ただし、192は逆アセンブル(236)を見る限りそれに該当しないし、(両方とも倍精度)
今回の俺の上記逆アセンブル(254、中身は君の指摘通りunmanagedにしただけ)も該当しない。(両方とも倍精度)
そして253は何故か直ってしまった。

256 デフォルトの名無しさん
2018/09/16(日) 22:34:16.44 ID:zL1WUjLu

253
> .netの場合、デバッガ配下では(デバッグのため)違うコードを実行しているような気がする。
> デバッガの逆アセンブル表示とかasm出力はあまり当てにならないような気もする。
これは俺も相当疑っているのだが、今のところ尻尾を掴めない。
ILspyだっけ?外部の逆アセンブルツール使えばチェック出来るのかな?

いずれにしても、252の指摘
・unmanagedにすれば直る
のも事実だし、逆アセンブルを見る限り、これを説明出来る理由もないのも事実。

257 240
2018/09/16(日) 23:13:48.62 ID:/oSJzlqn

> だから253の場合の誤差なら、仕様通りなんだよ。(片方が倍精度、もう片方は拡張倍精度)
そうなの? これが仕様通りならstatic版での違いは仕様通りということになる。
252はRelease版をコンソールで実行したときの逆アセンブル結果。
よって、Release版をコンソールで実行したときのみ(たまたま)レジスタ(80ビット)での演算になるので、
計算結果が変わるのはやむを得ないという結論になるのだが...

ちなみに、235はDebugモードでコンパイルし、デバッガ配下の逆アセンブル結果でしょ。

258 デフォルトの名無しさん
2018/09/16(日) 23:24:30.83 ID:zL1WUjLu

257
> 252はRelease版をコンソールで実行したときの逆アセンブル結果。
それはどうやって得たの?俺はそれが出来ないから困ってる。

> ちなみに、235はDebugモードでコンパイルし、デバッガ配下の逆アセンブル結果でしょ。
235は、IDE上でReleaseモードでF5で起動し、ブレークポイントを当てて止めて逆アセンブルした結果。
俺が貼ってる逆アセンブル結果は全てこの方法で、IDEで表示されているもの。
だからIDEの表示がおかしかったら話が全部おかしくなる。

君がIDEから独立して逆アセンブル出来ているのなら、その方法を知りたい。
こちらでも試す。


なおILSpy、グダグダ言わずに試してみたが、
当たり前だがmanaged code だとILが出る(x86ではない)ので、
俺って根本的に間違ってたかも?
今までx86のアセンブラで議論してたけど、これって .NET アプリには同梱されていないというオチ?
(まあその場合は君がやっている外部逆アセンブルが単純には出来ないはずなのだが)

259 240
2018/09/16(日) 23:35:36.48 ID:/oSJzlqn

"> 252はRelease版をコンソールで実行したときの逆アセンブル結果。
>それはどうやって得たの?俺はそれが出来ないから困ってる。
calc_norm_and_regulateの次の行に
System::Diagnostics::Debugger::Launch();
を入れてコンソールから実行すると just in time デバッグできるので、デバッガを選んだ後、
Visual Studioの 呼び出し履歴から calc_norm_and_regulate を探して移動する

"> ちなみに、235はDebugモードでコンパイルし、デバッガ配下の逆アセンブル結果でしょ。
>236は、IDE上でReleaseモードでF5で起動し、ブレークポイントを当てて止めて逆アセンブルした結果。

あれ? だとすると最適化していないのでは?
こちらの結果と違うのだが。

260 デフォルトの名無しさん
2018/09/16(日) 23:49:32.68 ID:SOVIz+sV

とりあえず、199に書いてあるとおり、元のコードで再現はしてるからな
その再現したコードと逆アセンブルした結果はあげとく

③-1 デフォルト設定(Release) 【コード】

#include "stdafx.h"
#include
#include
#include

using namespace System;

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
   double norm = 0;
   for (int i = 0; i < num; i++) {
      norm += (double)r[i] * (double)r[i];
//      fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   }
   fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   norm = sqrt(norm);
   if (regulate)
      for (int i=0;i          r[i] = (T)(r[i]/norm);
   return norm;
}

261 デフォルトの名無しさん
2018/09/16(日) 23:50:40.20 ID:SOVIz+sV

③-1 デフォルト設定(Release) 【コード】(その2)

int main(array ^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);
   fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   // Console::Write(String::Format("{0:F6}, 0x{1:x16}\r\n",norm, *(__int64*)&amp;norm));
   // Release build
   // 0.000000, 0x1ff68ddfb62221dd from IDE
   // 0.000000, 0x1ff68ddfb62221de from command prompt
   return 0;
}

262 デフォルトの名無しさん
2018/09/16(日) 23:51:14.21 ID:SOVIz+sV

③-1 デフォルト設定(Release) 【実行結果】

↓このコードの逆アセンブルコード
https://ideone.com/Gf4qUQ

[1]0x0007F2C44DFFF8F2:1.1053482540585106e-308
[2]0x1FF68DDFB62221DE:1.051355436595308e-154

263 デフォルトの名無しさん
2018/09/16(日) 23:54:13.85 ID:SOVIz+sV

で、200に書いてあるとおり↓Debugビルドと同じ結果が再現された

> ↓この下に(ループ内に)fprintf文を入れるだけで
>  ReleaseビルドとDebugビルドが同じ実行結果になることが確認できた
> norm += (double)r[i] * (double)r[i];

③-2 デフォルト設定(Release) 【コード】(その1)

#include "stdafx.h"
#include
#include
#include

using namespace System;

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
   double norm = 0;
   for (int i = 0; i < num; i++) {
      norm += (double)r[i] * (double)r[i];
      fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   }
   fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   norm = sqrt(norm);
   if (regulate)
      for (int i=0;i          r[i] = (T)(r[i]/norm);
   return norm;
}

264 デフォルトの名無しさん
2018/09/16(日) 23:54:58.60 ID:SOVIz+sV

③-2 デフォルト設定(Release) 【コード】(その2)

int main(array ^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);
   fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   // Console::Write(String::Format("{0:F6}, 0x{1:x16}\r\n",norm, *(__int64*)&amp;norm));
   // Release build
   // 0.000000, 0x1ff68ddfb62221dd from IDE
   // 0.000000, 0x1ff68ddfb62221de from command prompt
   return 0;
}

265 デフォルトの名無しさん
2018/09/16(日) 23:56:17.88 ID:SOVIz+sV

③-2 デフォルト設定(Release) 【実行結果】

↓このコードの逆アセンブルコード
https://ideone.com/E3Nxt8

↓実行結果を書き込めないからこっちに書き込んどいた
https://ideone.com/1cky6N

[1]0x0007F2C44DFFF8F1:1.1053482540585101e-308
[2]0x1FF68DDFB62221DD:1.0513554365953078e-154

以上だ

266 デフォルトの名無しさん
2018/09/16(日) 23:58:42.66 ID:zL1WUjLu

259
おお、そのやり方は知らなかった。大変助かった。ありがとう。
で、結果だが、253とは微妙に違うが、確かに拡張倍精度で計算されている。
逆アセンブル結果は、以下。

0000000e D9 EE fldz
for (int i=0;i 00000010 33 C9 xor ecx,ecx
00000012 EB 01 jmp 00000015
00000014 41 inc ecx
00000015 3B CE cmp ecx,esi
00000017 7D 0B jge 00000024
00000019 DD 04 CF fld qword ptr [edi+ecx*8]
0000001c D9 C0 fld st(0)
0000001e DE C9 fmulp st(1),st
00000020 DE C1 faddp st(1),st
00000022 EB F0 jmp 00000014
norm = sqrt(norm);
00000024 83 EC 08 sub esp,8
00000027 DD 1C 24 fstp qword ptr [esp]
0000002a E8 49 7C F2 FF call FFF27C78

とにかく、Releaseビルドをコンソールから起動した場合は拡張倍精度になってるのは分かった。
なら、ReleaseビルドをIDEから起動した場合は何を起動してるんだこれは?
Debugビルドとも微妙にアドレス等が違うんだが。

とはいえ、これは「そもそも色々間違っている」可能性が出てきたので、もう一度全体を見直す。
明日(だけで済むとも思えないが)確認し、整理してまた投稿する。

とにかくありがとう。これはだいぶインパクトがある。(はず)

267 デフォルトの名無しさん
2018/09/17(月) 00:49:10.27 ID:gBxGzBbQ

266
ideとconsoleで微妙に違うバージョンのvcruntimeがロードされてるとか?
process monitorで何が実行されて何がロードされてるか調べるとか?
あとはwindbgから起動したら、ideとconsoleのどちらの結果と一致するのか気になる。

268 デフォルトの名無しさん
2018/09/17(月) 01:06:37.11 ID:+dwRu2dr

262
だからそれは201と同じなんだよ。
その逆アセンブルでいうと、以下部分がメモリに出力されず、拡張倍精度で動作してるだろ。

00000281 fld qword ptr [ebp+FFFFFF14h]
00000287 fmul st,st(0)
00000289 fadd qword ptr [ebp+FFFFFF70h]
0000028f fld qword ptr [ebp+FFFFFF1Ch]
00000295 fmul st,st(0)
00000297 faddp st(1),st
00000299 fld qword ptr [ebp+FFFFFF24h]
0000029f fmul st,st(0)
000002a1 faddp st(1),st
000002a3 fld qword ptr [ebp+FFFFFF2Ch]
000002a9 fmul st,st(0)
000002ab faddp st(1),st
000002ad fld qword ptr [ebp+FFFFFF34h]
000002b3 fmul st,st(0)
000002b5 faddp st(1),st
000002b7 fld qword ptr [ebp+FFFFFF3Ch]
000002bd fmul st,st(0)
000002bf faddp st(1),st
000002c1 fld qword ptr [ebp+FFFFFF44h]
000002c7 fmul st,st(0)
000002c9 faddp st(1),st
000002cb fld qword ptr [ebp+FFFFFF4Ch]
000002d1 fmul st,st(0)
000002d3 faddp st(1),st
000002d5 fstp qword ptr [ebp+FFFFFF70h]

269 デフォルトの名無しさん
2018/09/17(月) 01:07:41.74 ID:+dwRu2dr

262(続き)
これは少なくとも「ループ回数が8の倍数である」事がコンパイラに見えないと出来ない最適化だ。
そうでなければ、例えばループ回数が6回や14回の時に、
最初の1回だけ 0299 に飛び込んで始める(頭の2回をスキップする)コードが必要になるが、
それは出てないだろ。

(そもそもこのアンローリングがx86的に意味があるのかも疑問だが)
一般的に、可変回数ループを展開すると、必ず上記の端切れ処理(キリが良くないときの処理)が必要になる。
だから「可変」だと確定しているのなら普通は展開しない。
つまり、一般的には、別関数でループ回数が引数で与えられてたら、その最適化はかからない。

今回ヒットするデータが偶々16回ループだっただけで、
俺の本番コードは可変で用いている為、
このようなアンローリングはされてない。(と思ってる。ただし265の通りもう一度確認必要)
こちらではデフォでそこまで最適化がかからないのでそちらの状況はよく分からないが、
その最適化がかかってるのなら、俺の本番コードとは違う状況で動いていることになる。(はず)
だから俺はその最適化がかからない範囲で議論してる。
それが俺が最初から別関数にしてた理由。(というか元のコードが別関数だからだが)


てゆうかマジでそれデフォのままか?
もしかして俺の環境がおかしくて、全く最適化されてないコードが出てる?

270 247
2018/09/17(月) 01:12:11.55 ID:yaPtorLJ

今、戻った。

席を離れて思ったが、多分、C++/CLI の場合、IDEでコンパイル後、
exeファイルになっても、unmanaged コード部分以外は、本質的には
.NETの共通中間言語(CIL、MSIL)になるだけで、x86のマシン語には
なってないと思う。一方、昔ながらの本当のC++では、exeの中身は、
本質的には、x86のマシン語が入っていた。

C++/CLIの場合、作成されたexeは、起動時に、中間言語がx86の
マシン語に直されてから実行される。その際、最適化の関係で、
どう直されるかが必ずしも一定していない。だから、IDEからの起動と、
コマンドラインからの起動で異なったx86命令に直されてしまう
のかも知れない。

出来たx86コードが、良く最適化された場合、x87 fpu命令を長きに
渡ってメモリに書き戻さずに、st(0)~st(7)のレジスタ上で演算し
続けられることになる。その場合、80BITの精度で計算される
期間が長くなる。

一方、x87 fpu命令に関する最適化が少し悪いか、悪くなくても命令の
使い方が変わってしまうと、80BIT(拡張double)から64BIT(double)へ
直されるタイミングや回数が変わる。

この両者では結果の精度が変わってくる。前者の方が後者より僅か
に精度が高くなる。

271 243=269
2018/09/17(月) 01:14:28.51 ID:yaPtorLJ

270
名前欄は、「247」ではなく「243」の間違いだった。

272 デフォルトの名無しさん
2018/09/17(月) 01:24:06.04 ID:yaPtorLJ

258
>なおILSpy、グダグダ言わずに試してみたが、
>当たり前だがmanaged code だとILが出る(x86ではない)ので、
>俺って根本的に間違ってたかも?
>今までx86のアセンブラで議論してたけど、これって .NET アプリには同梱されていないというオチ?

やはり、managed code部分は、x86命令では無く、ILにコンパイルされていて、
普通のC++とは違ってたんだ。

273 デフォルトの名無しさん
2018/09/17(月) 01:30:31.16 ID:yaPtorLJ

>calc_norm_and_regulateをunmanaged関数にすると、違いはなくなる。
>(Releaseビルドの`をコマンドプロンプトで起動した際にも、****ddの結果となる)

やはり。
unmanaged関数の場合は、CIL(MSIL)ではなく、exeの段階で既に
x86マシン語に直されたものが格納されるんだろう。だとすると、起動方法に
関係なく、少なくともその部分に関しては、x87 fpu命令の使われ方が
全く同じになる。callしたsqrt()関数の中は除いて。

274 デフォルトの名無しさん
2018/09/17(月) 01:37:20.55 ID:dj7qSZnZ

260-261のコードも263-264
も同じ条件でデフォルトでコンパイルしてる
コレは間違いない

一行コメントはずしてコンパイルしなおすだけだからな

で、262265みたいな結果になる
265の実行結果はDebugビルドとまったく同じになる
そのまんま

275 デフォルトの名無しさん
2018/09/17(月) 02:03:16.26 ID:yaPtorLJ

はっきり書いてある。managed code は、起動時にJITコンパイルされる。
だから、どんなマシン語に置き換わるかが、コンパイルしただけでは
まだ完全には決定されてない。

https://en.wikipedia.org/wiki/Managed_code

Drawbacks include slower startup speed (the managed code must be JIT
compiled by the VM) and generally increased use of system resources
on any machine that is executing the code.


managed code は、VMによって、JIT コンパイルされないといけないので、
起動速度が遅くなり、かつ、一般的に、システム・リソースの使用が増える。

276 デフォルトの名無しさん
2018/09/17(月) 02:49:02.18 ID:dj7qSZnZ

普通のコンソールアプリケーション(CLRじゃないほう)でも
同じコードで普通にまったく同じように再現するワケだが

ホントなキミラはなにを頭悪いことばっかりいってんの?
実行結果だけははっといてやるが

277 デフォルトの名無しさん
2018/09/17(月) 02:50:12.89 ID:dj7qSZnZ

④-1 デフォルト設定(Release) 【コード】(その1)

#include "stdafx.h"
#include
#include
#include

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
   double norm = 0;
   for (int i = 0; i < num; i++) {
      norm += (double)r[i] * (double)r[i];
//      fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   }
   fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   norm = sqrt(norm);
   if (regulate)
      for (int i=0;i          r[i] = (T)(r[i]/norm);
   return norm;
}

278 デフォルトの名無しさん
2018/09/17(月) 02:50:37.91 ID:dj7qSZnZ

④-1 デフォルト設定(Release) 【コード】(その2)

int _tmain(int argc, _TCHAR* argv[])
{
   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);
   fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   return 0;
}

279 デフォルトの名無しさん
2018/09/17(月) 02:51:12.35 ID:dj7qSZnZ

④-1 デフォルト設定(Release) 【実行結果】

↓このコードの逆アセンブルコード
https://ideone.com/Dqqn6J

[1]0x0007F2C44DFFF8F2:1.1053482540585106e-308
[2]0x1FF68DDFB62221DE:1.051355436595308e-154

280 デフォルトの名無しさん
2018/09/17(月) 02:51:53.99 ID:dj7qSZnZ

④-2 デフォルト設定(Release) 【コード】(その1)

#include "stdafx.h"
#include
#include
#include

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
   double norm = 0;
   for (int i = 0; i < num; i++) {
      norm += (double)r[i] * (double)r[i];
//      fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   }
   fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   norm = sqrt(norm);
   if (regulate)
      for (int i=0;i          r[i] = (T)(r[i]/norm);
   return norm;
}

281 デフォルトの名無しさん
2018/09/17(月) 02:52:10.55 ID:dj7qSZnZ

④-2 デフォルト設定(Release) 【コード】(その2)

int _tmain(int argc, _TCHAR* argv[])
{
   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);
   fprintf(stdout, "[2]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   return 0;
}

282 デフォルトの名無しさん
2018/09/17(月) 02:52:25.20 ID:dj7qSZnZ

④-2 デフォルト設定(Release) 【実行結果】

↓このコードの逆アセンブルコード
https://ideone.com/5OaUe6

↓実行結果を書き込めないからこっちに書き込んどいた
https://ideone.com/FFW0P0

[1]0x0007F2C44DFFF8F1:1.1053482540585101e-308
[2]0x1FF68DDFB62221DD:1.0513554365953078e-154

283 デフォルトの名無しさん
2018/09/17(月) 02:53:45.62 ID:dj7qSZnZ

④-2 デフォルト設定(Release) 【コード】(その1)

#include "stdafx.h"
#include
#include
#include

template static double calc_norm_and_regulate(int num, T* r, bool regulate){ // for debug.
   double norm = 0;
   for (int i = 0; i < num; i++) {
      norm += (double)r[i] * (double)r[i];
      fprintf(stdout, "[0]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   }
   fprintf(stdout, "[1]0x%016llX:%.19lg\n", *(uint64_t*)&amp;norm, norm);
   norm = sqrt(norm);
   if (regulate)
      for (int i=0;i          r[i] = (T)(r[i]/norm);
   return norm;
}

284 デフォルトの名無しさん
2018/09/17(月) 02:54:34.82 ID:dj7qSZnZ

(正)283
(誤)280

285 デフォルトの名無しさん
2018/09/17(月) 02:57:46.48 ID:dj7qSZnZ

277-278のコードも283,281のコードも
も同じ条件でデフォルトでコンパイルしてる

一行コメントはずしてコンパイルしなおすだけだからな

で、279282みたいな結果になる
282の実行結果はDebugビルドとまったく同じになる
そのまんま

CLRのとき(274)の動作とまったく同じ
キミラはずーっとなにやってるわけ?

286 デフォルトの名無しさん
2018/09/17(月) 09:44:34.76 ID:yu1Dprt2

285
同一のreleaseをコンソールで実行するかデバッガで実行するかで結果が異なるのはなぜだろう。
という話をしていたのであって、
debug/releaseで別の結果になることを問題にしているのではないです。

287 デフォルトの名無しさん
2018/09/17(月) 10:25:22.39 ID:+dwRu2dr

192がコンソール起動とIDE起動で挙動が異なる理由は分かりました。
ありがとう。

結論はつまり以下だ。
> JIT の最適化とデバッグ(抜粋)
> マネージ アプリケーションをデバッグするとき、Visual Studio では、既定で、
> ジャスト イン タイム (JIT: Just-In-Time) コードの最適化が省略されています。
> 最適化されたコードをデバッグするのは困難であるため、
> 最適化されたコードで発生するバグが、非最適化バージョンでは再現しないときにのみお勧めします。
> JIT 最適化は、Visual Studio の [モジュールの読み込み中に JIT 最適化を抑制する] オプションで制御されます。
> 実行中のプロセスにアタッチする場合、既に読み込まれ、JIT でコンパイルされ、
> 最適化されているコードが含まれることがあります。
> このようなコードの場合、[モジュールの読み込み中に JIT 最適化を抑制する] オプションの影響はありません。
> https://msdn.microsoft.com/ja-jp/library/ms241594.aspx
確かにこのオプションで直った。

288 デフォルトの名無しさん
2018/09/17(月) 10:25:48.51 ID:+dwRu2dr

その他諸々、話を整理すると、以下となる。(ソースは192参照)
1. managedコードではMSILが出力され、x86コードは含まれていない。
2. 起動時、MSILはJITされ、x86コードに落とされる。
3. このため、mainの1行目でブレークポイントで止め、calc_norm_and_regulateの逆アセンブルを見ようとしても、
 IDE上で「逆アセンブルを表示できません。式がまだネイティブ マシン コードに翻訳されていません。」と出る。
 これはmainの1行目に System::Diagnostics::Debugger::Launch(); を入れたときも同様。
4. そしてこのJITに関して、上記IDE中の 『[モジュールの読み込み中に JIT 最適化を抑制する] オプション』 が効いてくる。
 規定ではオフ、つまり、ReleaseビルドでもIDE起動ならJIT最適化は抑制される。
 これがfld/fmul/fadd/fstpのループコードになる理由。
 これをオンにすれば、確かにReleaseビルドIDE起動でも、
 fld/fmul/faddのループコードとなり、コマンドプロンプト起動と同じ結果になることは確認した。
5. 上記では表現が微妙だが、JIT最適化をするかどうかは読み込まれるときに決まるらしい。
 したがって、Releaseビルドを起動後にアタッチした場合は通常通り最適化され、
 IDEからReleaseビルドを起動した場合は『既定では』最適化が抑制されてしまう。
 これがIDE起動とコマンドプロンプト起動で挙動が異なった原因。
 上記、『[モジュールの読み込み中に JIT 最適化を抑制する]』のチェックを外せば、直った。
6. おそらくこのオプションはソリューション毎ではなく、IDEのインストール毎なんだと思う。
 (ソリューション毎のオプションはプロジェクトのプロパティにあり、場所が違う)
 だからその人の環境によっては最初からオフにしている人がいたかも?
 これが再現実験をしてくれた人たちと微妙に結果が異なったりした原因か?

これで192についての疑問は解消した。(はず)
俺の本番コードについては再度確認し、また報告する。

289 デフォルトの名無しさん
2018/09/17(月) 10:28:21.54 ID:dj7qSZnZ

同じリリースビルドで
結果がかわってんのになにいってんの?

fprintf入れるだけで
リリースビルドで結果が変わる

290 デフォルトの名無しさん
2018/09/17(月) 10:31:16.66 ID:dj7qSZnZ

やはり低学歴知恵遅れは
結果が意味するところが分かってないわ。。。

291 デフォルトの名無しさん
2018/09/17(月) 10:32:49.39 ID:dj7qSZnZ

ちなみにオレがあげた結果は
すべてリリースビルドの結果だからな
デバッグビルドの結果なんかあげても
意味ないからな

292 デフォルトの名無しさん
2018/09/17(月) 10:38:00.02 ID:dj7qSZnZ

CLRのケースもCLRでない普通のexeのケースでも
結果はまったく同じだからな

しかもすべてリリースビルドで
おきてる誤差までぴったり一致してる

293 デフォルトの名無しさん
2018/09/17(月) 10:52:24.35 ID:+dwRu2dr

289
お前は相変わらず理解してないな。

80bit(拡張倍精度)と64bit(倍精度)の演算で桁落ちが異なり、結果が異なるのは当然なんだよ。
問題は同じバイナリの癖に何故起動方法によって異なるのか?だったんだ。

理由はMSILだからだ。
MSILはCLR上でJITされ、x86コードに落とされる。
このときにJIT最適化がかかれば、拡張倍精度(を保ったまま)のコードになるし、
最適化がかからず毎回メモリに書き戻していれば、倍精度のコードになる。
.NETにおける同一バイナリってのは、同一MSILという意味であって、同一x86機械語という意味ではない。
だから、確かに同一バイナリを掴んでいたが、起動方法によって結果が異なっていたんだよ。
(VSがデバッグ用に意図的にそういう仕様にしていただけ。俺はそれを知らなかった)

君のコードについては、
いちいちfprintする場合はdouble(倍精度)が毎回必要になるから、
コンパイラはその部分での拡張倍精度でのループを断念し、
結果的にそのループが倍精度で回っているだけのこと。
もし仮にCが拡張倍精度型 ExDouble を持っていたとして、printfもそれに対応していれば、
もしかするとその毎回printfするコードでも拡張倍精度で回っていたかもしれん。
勿論手動でそういうコードのすることも可能だ。
そこはコンパイラがどう判断したのかでしかなく、あまり詰めても意味がない。

294 デフォルトの名無しさん
2018/09/17(月) 10:54:19.52 ID:+dwRu2dr

× fprint
○ printf
まあ、分かると思いますが

295 デフォルトの名無しさん
2018/09/17(月) 10:57:31.99 ID:dj7qSZnZ

で、最適化されてるかされてないかすら
いまのいままで気付くことすらできない
そして気付く方法すらわからなかったわけか

うあわ
頭わるう。。。

キミ、プログラムくむの向いてないわ

296 デフォルトの名無しさん
2018/09/17(月) 10:58:47.63 ID:dj7qSZnZ

問題の切り分けができない人は
プログラムはくめない

コレは定説だからな

297 デフォルトの名無しさん
2018/09/17(月) 11:09:05.96 ID:ivGPGa/P

287
なるほど面白いね。

レスが膨大過ぎて最初の方しか読んでなかったけど、ネイティブコードの話と思い込んでたら
.NETの話だったのかw

298 デフォルトの名無しさん
2018/09/17(月) 12:34:14.16 ID:yaPtorLJ

個人的には、C++やx87 FPUは割と知識があったけど、.NET関連は余り追いかけてなかったので、気づくのが遅れた。

managedコード、unmanagedコードについて、今回初めて調べてみたくらいだし。

299 デフォルトの名無しさん
2018/09/17(月) 12:53:34.77 ID:yaPtorLJ

293
「ID:dj7qSZnZ」の人は理解していないね。
彼は人の事馬鹿にしてるけど・・・。

300 デフォルトの名無しさん
2018/09/17(月) 13:39:23.91 ID:F2vzl5VC

最初に指摘されたことだろうに。
アセンブラレベルで精度や効率に介入したきゃ.netなんて使うな、なんて分かりきったこと。

301 デフォルトの名無しさん
2018/09/17(月) 14:58:46.52 ID:zCVYDMXL

エディタ使ってるとたまに Intellisense機能が効かないときがあるんだが
あれなんなの?
中間ファイルとか消せば直るの?

302 デフォルトの名無しさん
2018/09/17(月) 17:03:46.83 ID:+dwRu2dr

301
はい。よく壊れます。
> [C++] There is an issue with the .ncb file
> Close the solution.
> Delete the . ncb file.
> Reopen the solution.
> Reopening the solution creates a new . ncb file.
> https://msdn.microsoft.com/ja-jp/library/ks1ka3t6(v=vs.110)

303 デフォルトの名無しさん
2018/09/17(月) 17:17:56.66 ID:zCVYDMXL

302
なるほど .ncbファイルね
今度消してやってみるわ

304 デフォルトの名無しさん
2018/09/17(月) 18:30:58.83 ID:+dwRu2dr

さて俺の本番コード、以下のようだ。
疑問は解消した。協力してくれた皆様ありがとう。

◎:拡張倍精度、○:倍精度、として、(ソースは192参照)
・Releaseビルドをコマンドプロンプトから起動→◎積和、◎平方根
・Debugビルドをコマンドプロンプトから起動→◎積和、○平方根
・IDEから起動→○積和、○平方根

これで3種類出来上がってた。
(なお、167内バイナリをアタッチした際の「AまたはC」は、「AまたはB」の間違い)
そしてIDE上で『[モジュールの読み込み中に JIT 最適化を抑制する]』を変更すると、
確かにRelease/Debugの2種類に絞れる。
Debugだからといって、全く最適化がかからないわけでもないようだ。
(1行内なら最適化がかかる?)

参考に、Releaseビルドの該当部分の逆アセンブルは以下。
積和が拡張倍精度で行われ、そのまま fsqrt で平方根が取られる。
(関数ごとインライン化されているのでアドレスが中途半端だが)
double retval = calc_norm_and_regulate(count, vec, false);
0000003e fldz
00000040 xor edx,edx
00000042 test esi,esi
00000044 jle 00000056
00000046 lea eax,[esp+28h]
0000004a fld qword ptr [eax+edx*8]
0000004d fmul st(0),st
0000004f faddp st(1),st
00000051 inc edx
00000052 cmp edx,esi
00000054 jl 00000046
00000056 fsqrt
00000058 fstp qword ptr [esp+10h]

305 デフォルトの名無しさん
2018/09/19(水) 17:24:44.24 ID:GzaYiinu

VC++2008だけど、突然一部のファイルだけブレークポイントが入らなくなった・・・
.ncb消したり、そのプロジェクトだけリビルドしたけど直らない
全リビルドすればおk?

306 デフォルトの名無しさん
2018/09/19(水) 18:59:08.26 ID:KTUM/Tgt

305
根本的な解決策とは違うが
「ブレークポイントは現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。」
なら
[オプション] の[デバッグ]から[元のバージョンと完全に一致するソース ファイルを必要とする] をオフで

307 デフォルトの名無しさん
2018/09/20(木) 12:44:39.12 ID:rLmEYUhk

<a href="../test/

1 2 3 4 最新200 全部見る 


人気スレッド

1170: 【地震 23:54】 [震度3]大隅地方 (867)
1012: ピンロー! (834)
1007: 【バーチャル】hololiveアンチスレ#2356【youtuber】 (757)
99: 【GBP】ポンドはどうする? part5965 (738)
987: 鳩山元首相「香港人権法」を批判 習近平と会見も (593)
2996: 【お得速報】プレミアムモルツ12本879円(1本あたり73円)しかも電動式神泡サーバー付! [12604
992: 米国さん「賢いから日本人にはキリスト教の概念が通用しない」 (513)
1181: 中国による「静かなる侵略」に無防備でいいのか 「島を丸ごと買いたい」と言われた奄美・加計呂麻島 (416)
1183: 【(株)カラー】ガイナックス代表取締役:巻智博は「エヴァンゲリオン」作品と一切関わりありません!報道で関与付
1241: 【インド料理はまずい】米学者のツイート、ホットな議論呼ぶ (384)
56: NET BUZZ「鉄オタ選手権〜名鉄電車の陣〜」 2 (380)
2933: ☆高柳由美子 地下売上議論24181★ (348)
1012: 【N国】立花氏、予備校前で演説をするもうるさくて講師に追い出される (346)
1013: 【バーチャルYouTuber】.LIVEアイドル部アンチスレ#9085【アップランド】 (345)
997: 【バーチャルYoutuber】にじさんじ有ンチスレ13972【最果てのエモ】 (327)
1192: 【中国】広州で道路陥没 当局、落下した3人助け出さずセメント注入 被害者家族の抗議は無視 ★2 (312
1186: 【男尊女卑】男性を「ソクラテスみたい」と褒めるべし 日本の女性誌「JJ」の助言にネットで冷笑 ★2 (
611: 【FEH】ファイアーエムブレムヒーローズpart5146 (299)
2474: ポケモン剣盾シングルダブルマルチレイド雑談 (284)
2: 【中国】ウイグル人権法案可決に激怒、「アメリカも先住民を虐殺した」と言い始める ★6 (267)
976: 韓国さん「一日も早く日本が民主化され市民意識が目覚め安倍の様な馬鹿を首相にしないことを望みます」 (262)
2944: なぜNHKはハロプロをうたコンには呼びまくるのに紅白には呼ばないのか? (258)
980: 【動画】牛や子ヤギを大量に殺しまくるネパールのガディマイ祭りがヤバ過ぎると話題に (258)
1015: ■■速報@ゲーハー板 ver.52357■■ (248)
983: 裁判員「死刑」→最高裁「無期懲役」 裁判員「死刑」→最高裁「無期」 裁判員「死刑」→最高裁「無期」 (224)
1168: 【GSOMIA】日本「韓国、ホワイト国復帰に数年かかる」 青瓦台「早くして!」★3 (223)
2282: 高校留年するかもしれない... (209)
2970: 「死体のフルコース」という絵が深すぎて1万いいね [304868982] (185)
1010: NGT48山口真帆さんが配信にて『殺されてたら…』 運営はメンバー関与を認めるも、被害者が謝罪★1738 (
991: 【悲報】KOSPI時価総額、遂にApple一社を下回ってしまう・・・・韓国どうなってしまうん? (172)
2993: 【速報】 日 本 終 了 ★1 [582550711] (169)
1229: 【ボッチ首相】習近平主席の国賓待遇、自民党内からも異論相次ぐ (162)
2791: 京大生だが質問あるか? (159)
2966: 【かなペリ】ももいろクローバーZ潜入捜査官15259【しおペリ】 (156)
1185: 【生きる気力なくなった】遺族落胆 熊谷6人強殺の判決 (152)
2955: 生田衣梨奈さん、めっちゃおパンティが食い込むのお知らせwwwww (143)
1244: 【日本人まだ生きてる】襲撃犯叫んだ後、中村医師に3発 ★2 (143)
1658: 物性物理学者だが何か聞いとくことある? (137)
2964: 牧野真莉愛ちゃんがまたまたまたまた写真集出すって (136)
1011: 武さんの記録で1番抜くの難しいのってどれ? (135)
2005: 【悲報】高3生俺、テストまで8時間を切るも数?微積分が難しすぎて射精する。 (129)
3011: 「ノシ」 完全に廃れる  意味すらわからない若者も [452836546] (128)
1011: 【名無し限定】暇なので話しませんか?19168 (127)
1160: 【ハゲ】ローズマリーで抜け毛をシャットアウト!悪魔祓いにも (124)
1191: 【中村哲医師】アフガンから日本へ「許して」…現地の人々がハッシュタグ ★4 (122)
999: 【画像あり】 山本太郎さん 「国益の面で韓国は不可欠!日韓友好!」 (119)
988: 【闇深】 元ガイナックス社長・岡田斗司夫さん、枕営業を迫っていた!! (119)
1913: 前俺「日本クソ過ぎだろ……(不満)」海外旅行後俺「なるほどね」 (113)
1207: 【中韓】中国 王毅外相 韓国 ムン大統領と会談 両国が連携で一致 (113)
1238: 【岡山】「田舎警察に解除できるかな?」 岡山城などに爆破予告した疑いで43歳の男逮捕 (112)
1187: 【北朝鮮】トランプ氏を非難 「老いぼれのもうろくか」 (112)
1987: ヘタな3流大卒や高卒よりも 中卒の方が地頭いい奴多い説 (109)
1820: 節約したい!お前ら渾身の貧乏飯を教えてくれ (109)
3001: 【快挙】2019年グラドル表紙ランキング発表!牧野真莉愛 ランクイン! (109)
1211: 【中村哲医師の足跡】「100の診療所より1本の用水路を」 (105)
977: 文在寅大統領補佐官「米軍が韓国から出て行くなら中国の核の傘に入ればいいのではないか?」 (103)
1905: 数年前に人気を博した黒人の歌手いたじゃん名前思い出せないから教えて (102)
1898: ダウンジャケット洗濯機で洗っちゃうバカwwwwwwwwwwwwwwwwwwwww (100)
2039: 00:00:00.000 (100)
1004: ホスト殺人未遂の高岡由佳に懲役3年6ヶ月 ホストが寛大な処分求めるも執行猶予つかず嗚咽 (100)
2782: 眠れないから死ぬほど頭を使う問題を出してくれ (97)
1233: 【京都】京都上空にオスプレイとみられる機体 防衛省から連絡なく市民に不安も (97)
984: 韓国さん「なんで日本の株式市場ってこんなに上がり続けてるんだ?」 (96)
1223: 【朝日新聞】45歳以上の「早期退職」募集 退職金の「驚きの金額」 ★2 (95)
987: 【オマイら大勝利速報】 ディズニー、「アナ雪2」ステマで謝罪 (94)
975: 韓国紙「中国外相、あす『警告状』持参で来韓」 事実上の裏切りに怯える韓国 (94)
986: 【動画あり】 山本太郎さん「竹島は韓国にあげたらいいと思うんですけど、皆さんはどう思われます?」 (91)
2982: 「元NHKの秋元康の犬」こと石原真がモーニング娘。代々木コンに参戦したよ (89)
974: 韓国さん「アジア絶好調なのに私たちだけ蒼白…外国人21日目の売り越し」「いつまで続くんだ…」 (89)
2644: 【画像】リスカした (86)
1004: 【バーチャルYouTuber】.LIVEアイドル部アンチスレ#9081【ヒラコーさん…見えていますか…】 (
1197: 【速報】地震 津波に注意 (85)
2097: ニートでルームシェアしたい。毎日酒飲んでゲームして暮らしたい (84)
981: クリスマスまでにロリコンを恋人にしたいんだがどうすればいい? (84)
1004: 【速報】 倉野尾成美、瀧野由美子らのAKB選抜メンバーもSRイベント 参加表明 キタ━━━━(゚∀゚)━━━
2791: 「百合アニメの最高傑作」と言えばもちろんあれだよなwwwwwwwwwwwwwwwwwwwwwwwwwww (
978: れいわ新選組支持者さん 新井浩文への判決に不満 「懲役5年?殺人犯でもないのに?」 (81)
990: 「『アナと雪の女王2』感想漫画企画」に関するお詫び (79)
1010: 三大・何でこいつが人気なのか理解出来ない女優「長澤まさみ」「深田恭子」「安田美沙子」あと一人は? (78)
2669: 46歳のおばさんです (77)
1196: 【東京五輪】バッハIOC会長「選手の健康と幸せが重要」マラソン札幌移転で (76)
2638: ディベートしようぜ (75)
2346: 【エゴグラム】ガチ陰大学生が性格診断をやった結果w (74)
2309: 今からマック行くから安価で買う (73)
1239: 【中村哲さん銃撃】自動小銃で数回撃たれる 強い殺意で犯行か (73)
3010: 地震 [346914996] (72)
3022: AV女優さん、心が歪んでいる人には◯◯◯にしか見えない写真を投稿 [309927646] (71)
1745: 【実況】アズールレーン 第9話【アニメ】 (70)
1003: 【フィギュア】羽生、SP97・43点で2位発進 首位チェンとは12・95点差/フィギュア (70)
1217: 【ベトナム】食肉市場に出回るペット 飼犬を盗んで出荷前には無理やり泥水を流し込み... (70)
2776: 女じゃないけど死にたい (69)
1224: 【】死亡事故起こした「はとバス」運転手はインフルエンザで38度を超える高熱 点呼時は『異常なし』 (69)
2493: 女じゃないけどおちんちん舐めたい! (68)
1222: 【山梨小1女児不明】「懸賞金500万円支払います」に大きな反響が (66)
1750: 【疑問】待遇同じになるなら正社員より派遣でよくね? (64)
1250: 【社会】食肉を解体する「屠畜」 作業 その担い手に向けられ続ける理不尽な差別 ★3 (64)
2832: 早起きしたから元ホテヘル嬢が全レスするよ (60)
2928: 「人の目を見て喋りましょう」←そろそろこの間違った文化教えるのやめさせよう (58)
2974: おまいらにとっての浜田麻里の名曲 (57)
1216: 【イトーヨーカ堂】1割の店舗で元日休業へ 働き方改革 (57)
2751: お前らが今までに犯した犯罪行為を晒していけ (55)
2136: Amazonのセールでps4買うか迷う (55)
2613: オーキド「ワシが調べた時はホントに……ホントに151匹だったんじゃ………」 (54)
2257: (´・ω・`)肉焼くだけじゃもう満足できない!!! (54)
2179: 横浜市栄区って本当に住んでる人いるの? (54)
1012: 梨子、セブンのcmゲット! (54)
1018: いつからファミ通の点数を信用しなくなった? (54)
2124: IDにsexキタ━━━━(゚∀゚)━━━━! (53)
2988: 今日のモーニング娘。代々木コンサートで最高のベストショットがこれ。 (52)
2131: VIPでポルノグラフィティの好きな曲ランキング作ろう!好きな曲3つ書いてけ! (51)
1776: 【悲報】俺、腹の肉がヤバいwwwwwwwwwwwwwwwwwwwwwwww (50)
1002: 最近久保怜音と大盛真歩がすさまじく仲が良いけど何があったの? (50)
2353: スズキのリコールでわざわざディーラー車検受けに行ったのに代車擦って17万請求された (49)
1972: VAPE ベイプ 詳しい人おる? (48)
1024: お前らが理想とするラスボス戦に求めること挙げてけ (48)
1251: 【鬼畜】千葉県職員の父を逮捕 生後4ヶ月の乳児に暴行か 頭や胸の骨が折れ体には多数の傷 (48)
2035: ゴアテックスとかいうくっそ高い素材 (47)
996: 銃殺された中村さん、自動小銃で数回。強い殺意で犯行か (47)
2993: 好きな作詞家、作曲家の組み合わせ (47)
2851: レイプされたんだがマジでトラウマ (46)
2362: まちカドまぞく読んでいい? (46)
1009: 韓国国会議長「寄付法案出すわ」→韓国さん「汚い安倍が寄付で過ちを隠そうとしてる!」 (46)
2605: このジャンバーカッコいいですか?(´・ω・`) (45)
1005: 【訃報】女優・松本ちえこさんが逝去、60歳『バスボン』のCMで大ブレイク (45)
3005: 山?夢羽ちゃんのパンティにありがちなこと (45)
1004: マジでコントレイルの鞍上どうするんだよ! (45)
2826: ババアだけど新入社員が憎い (44)
2166: アイドル部「夜桜たまさん、さようなら」 (44)
100: 【NY原油】凄い勢いでいろいろ書くスレ$712【WTI】 (44)
2814: 外から謎のサイレンが聞こえるんだが何なんだ? (43)
2384: 男の娘「あ、あのね俺くん!ボク>>4!」俺「エッ!?」 (43)
2103: ゲーミングPCおじさん「PC買ってしまえばPCゲームは安上がり、Steamのおかげ」←これwwwwww (4
1231: 【米国】警官が女性の遺体愛撫の疑い 発見された女性遺体の胸触る (43)
2787: 中国で道路に深さ38メートルの穴が開き二人が落下するも救出せずそのままセメント注入 (42)
3003: ☆ NACKY あなたがいるから中島早貴ちゃん 298 ☆ (42)
1227: 【地震】桜島で人工地震 (42)
2028: ジェイソン・フレディ・朝青龍・貞子←殺しあいさせたら誰が一番強いの? (41)
1924: 低身長の女と結婚したい (41)
1837: ゲームのキャッチコピーでタイトルを当てるスレ (40)
1010: DPの噂・雑談スレPART211 (40)
2478: ドラゴンクエスト?をリメイクするとしたらどういう要素を足したい? (39)
1923: フリーターになりたいんだけどフリーター経験者の方はどう思いますか (39)
1884: ご飯も奢ってくれてホテル代もだしてくれる紳士いませんか? (39)
997: 【写真】「どうして裸で、誰が撮影したの?」メドベージェワ選手の意味深写真がファンに衝撃を与える (39)
1248: 【横浜地検】元神奈川県警警部を不起訴 下半身露出、女性に触らせる (39)
2784: シルクロードに旅行しに行こ打と思う!!! (38)
1002: かんぱに☆ガールズ 5499社目 (38)
2497: 【悲報】日本の衰退が止まらない件について (37)
2236: お前らまさか身分証明書が「運転免許証」以外の奴、いないよな? (37)
2979: 戦後74年間、死刑判決を受けた女囚は何人もいるが執行された女囚は一人もいない (37)
982: 韓国さん「地震連発?日本のやってきた来たことを考えると仕方のないことだろう。天罰というやつだ」 (36)
2989: ばんばひろふみ、ベビメタを見に行ったら鞘師が出てきて号泣wwwwwwwww (36)
1013: マツコ、大井競馬場へ (36)
2801: お前らってなんのハイパーヨーヨー使ってた?wwwwwwwwwwwwwwwwwwwwwww (35)
2520: 忘年会で記憶なくして自宅いるんだが (35)
1007: 【春場ねぎ】五等分の花嫁 609等分目【マガジン】 (35)
2993: なぜハロプロからパンチラアイドルスマイレージが出現してしまったのか? (35)
998: ウーバーイーツ配達員らの労組 報酬引き下げ撤回を 申し立てへ (35)
2951: 【画像】ゲームボーイ世代にしかわからないこと (34)
995: 会田誠「ネトウヨは、僕にとって出来の悪い後輩」 (34)
2950: すまん、タバコとお茶買ってきてくれるか?(´・ω・`) (33)
2993: 金がないやつはともかく、金があるやつはなぜ新宿に住まないの? (33)
994: 情弱神奈川県の横浜市さん、プラプラ詐欺被害者向けに木製ストローを開発 (33)
2899: さっきガチでスリップした (32)
2794: 人間が生きてる意味って何? (32)
2779: 女だけど死にたい (32)
2: 【中国】ウイグル人権法案可決に激怒、「アメリカも先住民を虐殺した」と言い始める ★6 (267)
976: 韓国さん「一日も早く日本が民主化され市民意識が目覚め安倍の様な馬鹿を首相にしないことを望みます」 (262)
2944: なぜNHKはハロプロをうたコンには呼びまくるのに紅白には呼ばないのか? (258)
980: 【動画】牛や子ヤギを大量に殺しまくるネパールのガディマイ祭りがヤバ過ぎると話題に (258)
1015: ■■速報@ゲーハー板 ver.52357■■ (248)
983: 裁判員「死刑」→最高裁「無期懲役」 裁判員「死刑」→最高裁「無期」 裁判員「死刑」→最高裁「無期」 (224)
1168: 【GSOMIA】日本「韓国、ホワイト国復帰に数年かかる」 青瓦台「早くして!」★3 (223)
2282: 高校留年するかもしれない... (209)
2970: 「死体のフルコース」という絵が深すぎて1万いいね [304868982] (185)
1010: NGT48山口真帆さんが配信にて『殺されてたら…』 運営はメンバー関与を認めるも、被害者が謝罪★1738 (
991: 【悲報】KOSPI時価総額、遂にApple一社を下回ってしまう・・・・韓国どうなってしまうん? (172)
2993: 【速報】 日 本 終 了 ★1 [582550711] (169)
1229: 【ボッチ首相】習近平主席の国賓待遇、自民党内からも異論相次ぐ (162)
2791: 京大生だが質問あるか? (159)
2966: 【かなペリ】ももいろクローバーZ潜入捜査官15259【しおペリ】 (156)
1185: 【生きる気力なくなった】遺族落胆 熊谷6人強殺の判決 (152)
2955: 生田衣梨奈さん、めっちゃおパンティが食い込むのお知らせwwwww (143)
1244: 【日本人まだ生きてる】襲撃犯叫んだ後、中村医師に3発 ★2 (143)
1658: 物性物理学者だが何か聞いとくことある? (137)
2964: 牧野真莉愛ちゃんがまたまたまたまた写真集出すって (136)
1011: 武さんの記録で1番抜くの難しいのってどれ? (135)
2005: 【悲報】高3生俺、テストまで8時間を切るも数?微積分が難しすぎて射精する。 (129)
3011: 「ノシ」 完全に廃れる  意味すらわからない若者も [452836546] (128)
1011: 【名無し限定】暇なので話しませんか?19168 (127)
1160: 【ハゲ】ローズマリーで抜け毛をシャットアウト!悪魔祓いにも (124)
1191: 【中村哲医師】アフガンから日本へ「許して」…現地の人々がハッシュタグ ★4 (122)
999: 【画像あり】 山本太郎さん 「国益の面で韓国は不可欠!日韓友好!」 (119)
988: 【闇深】 元ガイナックス社長・岡田斗司夫さん、枕営業を迫っていた!! (119)
1913: 前俺「日本クソ過ぎだろ……(不満)」海外旅行後俺「なるほどね」 (113)
1207: 【中韓】中国 王毅外相 韓国 ムン大統領と会談 両国が連携で一致 (113)
1238: 【岡山】「田舎警察に解除できるかな?」 岡山城などに爆破予告した疑いで43歳の男逮捕 (112)
1187: 【北朝鮮】トランプ氏を非難 「老いぼれのもうろくか」 (112)
1987: ヘタな3流大卒や高卒よりも 中卒の方が地頭いい奴多い説 (109)
1820: 節約したい!お前ら渾身の貧乏飯を教えてくれ (109)
3001: 【快挙】2019年グラドル表紙ランキング発表!牧野真莉愛 ランクイン! (109)
1211: 【中村哲医師の足跡】「100の診療所より1本の用水路を」 (105)
977: 文在寅大統領補佐官「米軍が韓国から出て行くなら中国の核の傘に入ればいいのではないか?」 (103)
1905: 数年前に人気を博した黒人の歌手いたじゃん名前思い出せないから教えて (102)
1898: ダウンジャケット洗濯機で洗っちゃうバカwwwwwwwwwwwwwwwwwwwww (100)
2039: 00:00:00.000 (100)
1004: ホスト殺人未遂の高岡由佳に懲役3年6ヶ月 ホストが寛大な処分求めるも執行猶予つかず嗚咽 (100)
2782: 眠れないから死ぬほど頭を使う問題を出してくれ (97)
1233: 【京都】京都上空にオスプレイとみられる機体 防衛省から連絡なく市民に不安も (97)
984: 韓国さん「なんで日本の株式市場ってこんなに上がり続けてるんだ?」 (96)
1223: 【朝日新聞】45歳以上の「早期退職」募集 退職金の「驚きの金額」 ★2 (95)
987: 【オマイら大勝利速報】 ディズニー、「アナ雪2」ステマで謝罪 (94)
975: 韓国紙「中国外相、あす『警告状』持参で来韓」 事実上の裏切りに怯える韓国 (94)
986: 【動画あり】 山本太郎さん「竹島は韓国にあげたらいいと思うんですけど、皆さんはどう思われます?」 (91)
2982: 「元NHKの秋元康の犬」こと石原真がモーニング娘。代々木コンに参戦したよ (89)

154: Visual Studio 2008 Part 22 (311)

人気スレッド2




1061: 【アベノミクス】増税後の金銭的負担、4割の人が「想像以上」 (971)
76: Fate/GOスレ (937)
2: 【USD/JPY】新ドル円15383【雑談禁コテ禁IP無】 (934)
1000: 【環境】海に流れ込むマイクロプラスチックの28%がタイヤ (913)
1009: 【mobage】アイドルマスターシンデレラガールズ26834人目 (910)
1013: 【名無し奥も○○奥も】 気楽に井戸端会議 6719【みんな来い】 (909)
96: 【USD/JPY】ドル円専用スレ Part29941【$\】 (907)
1105: 【群馬】万引き容疑のおばさん(45)、警官訪問時に焼身自殺する (890)
906: イチロー「日本の野党やメディアは酷い。海外から見てると本当にバカらしい」 (884)
991: AKB48×SHOWROOM ★1674 (866)
932: 【バーチャルYouTuber】.LIVEアイドル部総合スレ#98【アップランド】 (853)
2805: 『KOKORO&KARADA』MVキタ━━━━━━━(゚∀゚)━━━━━━━!! (844)
6: 熊谷6人殺害のペルー人、一審の死刑判決を破棄し無期懲役 東京高裁 (842)
2868: 【画像】学校の授業用に使うPCのスペックがエグすぎると話題に。 これが日本の現状かと思うと泣けてくる(;_;
1: 【吾峠呼世晴】鬼滅の刃ネタバレスレ130 (741)
6: 【埼玉】熊谷6人殺害、二審は無期懲役 ペルー人の被告、一審は死刑判決 (723)
966: 【テレビ】前澤友作、剛力彩芽との別れの真相「ついてきてほしい僕と、仕事をしたい彼女」 (700)
18: 中国で道路陥没、落下した人を救援せずセメント注入 (697)
1: 【USD/JPY】新ドル円15382【雑談禁コテ禁IP無】 (692)
2804: 【乞食達の祭典】Amazonサイバーマンデー [781534374] (672)
95: 【USD/JPY】ドル円専用スレ Part29940【$\】 (664)
6: 【韓国経済】50年で最悪の状況を迎えている[12/05] (647)
49: 所さん!大変ですよ「見てよし!食べてよし! (珍)深海魚 大集合」 (646)
42: 科捜研の女 #23★3 (645)
54: VS嵐 (644)
962: 【元剛力】前澤氏「子供がいます。結婚していないお母さんとの…」 剛力との破局真相も語る (638)
2753: さくら学院☆3101時間目 (633)
50: ネーミングバラエティー 日本人のおなまえっ!選【ウソのようなホントのお名前】★2 (630)
760: Fate/GOスレ (624)
33: ☆映画実況13933 狼よさらば #4 (624)
932: 護衛艦「いずも」の仰天空母改造案画像がリーク。アングルドデッキ、カタパルト・・・・w (616)
1014: 【PSO2】PHANTASY STAR ONLINE2【30281】 (606)
1082: 【れいわ】#山本太郎 さん、消費税5%で合意しない限り、野党共闘に参加しないと明言 (596)
1091: 【乗り物】JALの「幼児マーク」が炎上!泣き声だけが「迷惑」?「隣が肥満」問題も深刻化 (594)
2863: 地震 [485983549] (589)
963: 【芸能】「一万円札を偽造された方を発見しました」公開した写真は“旧札”…アイドル運営の注意喚起に失笑集まる (
2686: BABYMETAL ★6326 (584)
1154: 【飲食宅配代行】ウーバーイーツ、配達員の報酬引き下げ 団体交渉も拒否 (584)
2804: ◾ 21:00〜 モーニング娘。'20 全国同時握手会抽選会 (563)
922: アーモンドアイ 有馬記念出走の方向 (561)
52: 【マターリ】NHKスペシャル 体感 首都直下地震「DAY4 危機を生きぬくために」 ★2 (557)
63: 艦これスレリンク24時間レース (551)
944: ポケモン剣盾は何故成功したのか (528)
5: 【生活保護不正受給】 共産党は弱者の味方のふりをして貧困者を食い物にしています。 騙されてはいけません! (523
964: 【芸能】宮迫博之が高級マンションから引っ越し のしかかる巨額税金 (506)
52: 実況 ◆ フジテレビ 90888 (505)
20: 2年間不稼働の口座に手数料、三菱UFJ銀検討 年1200円 (493)
8: 【新潟女児殺害】「死刑でも足りぬ」 無期懲役判決に遺族は悔しさ ★2 (490)
1042: 【イートイン脱税】なぜ私たちをこんなに「ムカつかせる」のか? ★3 (487)
2801: ■ 加賀楓・佐々木莉佳子(副音声) ■ 『モトカレマニア』#08【物語は最終章へ!究極の匂わせ女子現る】 ■
46: 【マターリ】報道ステーション (482)
94: 【GBPUSD】ポンドルは飛んでいくPART14 (480)
2935: 野党、異例の国会の40日延長を要求 安倍首相に説明求め 自民は絶句 [214127477] (475)
2781: 正直これは流行る前から知ってたぞって自慢したいもの [169249397] (460)
1005: ジャンプ打ち切りサバイバルレースPart3134 (457)
81: VIP深夜の変則雑談スレ (444)
40: 【マターリ】科捜研の女 (433)
2716: 【幸福の科学】なぜ新,木,優,子はハロプロに関わってくるのか★2 (427)
1043: 【企業】柿ピーの黄金比率は? 「6対4」の亀田製菓が変更検討 最多だった回答は「7対3」 (417)
1044: 【トヨタ】新小型SUV「ライズ」3万台突破 発売1カ月 (413)
901: 【画像】 FNS歌謡祭で槇原敬之さんが放送事故wwwwwwwwwwwww (407)
1011: 【韓国】「倭系」前方後円墳に改めて注目…反日感情根強い中、研究者は限られていたが[12/5] (396)
1015: ナマコ会場 (391)
15: 慰安婦バッジをつけて日本に渡った人気俳優のパク・ボゴムに、韓国人が称賛の声 (389)
976: 超極暖ヒートテックが真冬でも、汗ばむくらい温かいとほざいていたゴミクズども出てこいやゴラァ!!!!! (389
54: とらせん 全レス (386)
68: 【画像】まんさん「子供がわがままばかり言うからタブレット奪って壊して捨ててやったw子供の泣き顔と残骸見て(パシャ
56: 直撃!シンソウ秘書面接SP★6 (381)
898: 【国連】お金がない! (376)
909:  なんで中村哲さんのような人が死んで、おまえらみたいなのが生きてんの? (372)
944: 【悲報】乃木坂エース齋藤飛鳥さん洗面所に歯ブラシが2つあり同棲バレしてしまう (371)
1013: 【総合】パズル&ドラゴンズ6992【パズドラ】 (368)
2705: おっさんたち、鬼滅の刃が大ヒットしている理由がわからないwwww (367)
1002: 【PS4/XB1】APEX LEGENDS エーペックスレジェンズ Part334 (365)
967: SHOWROOMがジャニーズと業務資本提携 (362)
1001: 【シャニマス】アイドルマスター シャイニーカラーズ 934週目【enza】 (362)
915: 仮面ライダーもはやバイク乗ってないじゃないか (355)
1012: 【詐欺運営】ポケモンマスターズ181【佐々木悠】 (352)
1014: 【名無し奥も○○奥も】 気楽に井戸端会議 6718【みんな来い】 (352)
945: 【議論】なぜ十三機兵防衛圏は大爆死してしまったのか…? (351)
919: 自民党は中道左派だし、立憲や共産党は左翼だろ じゃあ右派って山本太郎しかいなくね? (350)
944: 【うんこちゃん】加藤純一総合スレpart859 (342)
55: [再]鶴瓶の家族に乾杯「lSSAが初挑戦!大阪府田尻町ぶっつけ本番旅!」 (335)
924: PS4のCM、盗作まみれで炎上、お蔵入り (333)
47: 報道ステーション★5 (331)
1036: 【LIVE】「桜を見る会」野党追及本部が12回目のヒアリング (329)
129: 一人酒はボーナス支給日です (324)
39: 実況 ◆ テレビ朝日 58218 服装でおまいらの心を惑わすむー (319)
43: 【マターリ】ドクターX〜外科医・大門未知子〜 第9話 (318)
65: もみじという空気コテですがゆっくり全レスします (315)
45: ドクターX〜屁科医・菊門未知子〜 #8★8 修正 (315)
1014: 【剣盾】ポケモンソード・シールド質問・感想スレ54 (311)
2663: 【速報】モーニング娘。'19羽賀朱音卒業 (303)
608: 【デレステ】スターライトステージ★11138 (296)
1128: 【#菅義偉官房長官】内閣不信任案は解散大義 野党を揺さぶる狙いがあるとみられる (295)
1000: 艦これ愚痴スレ Part1987 (293)
1131: 【自動車】「ホンダNSX」の2020年モデル登場 東京オートサロン2020 (292)
1011: 中田組長逮捕!★6 (289)
2732: 道重さゆみ あの一斉を風靡したペリカンのカッタくんの親友としてテレビ出演!!!!!!!!!!!! (279)
963: 【祝!】ジャップがまた受賞!温暖化対策に消極的な国に贈る「化石賞」。COP25会場にて (277)
988: ベヨネッタ完全版がPS4で発売決定!現行ハードのSwitch独占が崩れ任豚涙目 (275)
2632: 【幸福の科学】なぜ新,木,優,子はハロプロに関わってくるのか (272)
1136: 【自動車】1億円を超える「日産GT-R50 by Italdesign」の納車が2020年後半にスタート (
1007: 【正論】れいわ山本代表、神戸で演説「国が支援させてくださいという姿勢に変わるべきだ」「人に優しい政治を」 (
950: 【名前出せよ】 5歳女児をレイプ しかもバイト先の常連の女の子 目をつけた上で中出しレイプ (257)
1137: 【速報】小笠原諸島・西之島で噴火か 警戒範囲拡大―気象庁 (257)
1107: 【科学技術】政府、ゲノム編集赤ちゃん禁止 当事者「心が引きちぎれそう」 (256)
2: 【速報】ペルー人による熊谷6人連続殺人事件、無期懲役!!! 東京高裁 [933662325] (255)
606: Fate/Grand Order まったりスレ5415 (254)
1088: 立憲民主党 石垣のりこ氏 大学教授を根拠なく「レイシスト」呼ばわり 釈明無に支持団体から困惑の声 (253)
1007: 育児している奥様(IDなし)1847 (252)
941: Amazonサイバーマンデー ニュー速会場 (252)
2831: ハロプロ研修生総合スレ Part1779 (251)
117: 折り返すアイドルマスターミリオンライブシアターデイズミリマスグリマスミリシタスレ (246)
71: 俺のパスポート見てくれ。ジャップども (246)
64: ADHDつらすぎる3日続けて17時までに役所に行けなくて手続き出来なかった (244)
972: コジプロの品川のオフィス賃料年間4億円か? (244)
7: 【新幹線3人殺傷】小島被告、謝罪の気持ち「一切ない」「(検察から)死刑になるかもしれないと聞かされ、すごくおびえて
1001: 【本スレ】SKE48★18093【本スレ】 (240)
1020: 【鉄道】北陸新幹線、JR西社長「一気に新大阪までの全線開業を強く望む」 ★2 (240)
2707: デュラン・デュランとかいうバンド (237)
981: 西野未姫「初めて出来た彼氏と付き合ったその日にセックスした」 (235)
914: 温暖化が起きてるかも定かでないし、CO2が原因かも定かでないし、人間が原因かもわかってないんだよな (233)
1003: 【Switch】大乱闘スマッシュブラザーズSP リーク検証&DLC予想スレpart108 (231)
986: 【桜を見る会】「国民は理解しつつある」って……自民党さん、それホント? (230)
8: ユニクロのN-3Bが3990円wwwwwww (230)
10: インビジブルピンポンに立ち向かう (228)
1084: 【韓国】文正仁特別補佐官「在韓米軍が撤退したら中国が核の傘を提供すればどうか」★2 (227)
973: アニメキャラの人種問題。日本人のキャラを黒人がコスプレすると叩かれる件 (225)
59: 【速報】急騰・急落銘柄報告スレ12625 (225)
2941: 【悲報】 宮迫の復帰、ポシャる さんまが反発の強さにビビって取り消し [541495517] (224)
941: 【朗報】世論調査で98%の国民が「IZ*ONE」解散に反対! (224)
34: プリスクタイム 第10回 (222)
661: も し 続 編 が 発 売 さ れ た ら 絶 対 買 う ゲ ー ム と い え ば (217)
21: 文在寅「国民の団結で日本の輸出規制に勝っている。韓国経済の基礎は丈夫、あちこちで底力を発揮」 (217)
903: 立憲民主など野党が40日間の国会会期延長要求で一致 (214)
1008: 民○党類ですが鉛筆に転生したい件について (201)
1065: 【臨時閣議】事業規模26兆円の経済対策を閣議決定 (201)
2911: フクちゃんデケェww (199)
595: 【プロスピ】プロ野球スピリッツA part858 (199)
2882: おいおい地震が異常に多いぞ (198)
139: なんUPKMNSWSH部★33 (197)
2648: クロちゃんのモンスターアイドルってヤラセだろ (193)
1092: 【横断歩道】信号待ち「歩道の端」はダメ!大型車の振り出し再現ツイートが話題 10万いいね (193)
77: 彼女ができましたAA雑談 (189)
971: 東京都、五輪水泳会場のトイレ臭対策を発表 「6000万円かけてお台場に砂をまく」 (189)
935: 【朗報】清宮レイちゃん「キスしたことないし」 (186)
1: 【春場ねぎ】五等分の花嫁 608等分目【マガジン】 (186)
958: 【悲報】乃木坂エース齋藤飛鳥さん洗面所に歯ブラシが2つあり同棲バレしてしまう (185)
1009: ドラゴンクエストウォーク482歩目 (182)
990: 【森友学園問題】 “森友学園問題”の籠池夫妻がYouTubeチャンネルを開設 ★4 (181)
895: ガースー「災害後などで復元すれば公文書になるが、復元前のバックアップデータは行政文書ではない」 (178)
1012: 【金融】不稼働口座に手数料、三菱UFJ銀検討 年1200円 (177)
944: リアアメリアが化け物すぎる (174)
921: 俺が認定する最強のカップ焼きそばは日清焼そば。これに勝てる奴は未だに出会っていない。 (172)
1191: 【悲報】中国「インディアン虐殺したアメリカ人に文句言われたくない」 (171)
1011: 立憲民主党内の総合政局スレッド354 (170)
943: 【悲報】アーモンドアイ、やっぱり有馬記念出なさそう (169)
413: 名古屋の車社会ぶりってエグいな (167)
3: けものフレンズ【2】542人目 (166)
545: 会社のロゴを作ってくれないか (165)
949: 神「望むゲーム1つ、来月発売にしてやろう」←何選ぶ? (165)
962: 壇蜜 「風呂場でおしっこ」衝撃告白! “アブない願望”吐露する声が殺到! (164)
1006: 【DQW】ドラクエウォーク 無課金スレ part.71【コテハン禁止】 (163)
1005: ■■芸能有名人の噂2340■■ (163)
2780: ハッキリ言う、今のモーニング娘。は糞 (163)
2804: 【乞食達の祭典】Amazonサイバーマンデー [781534374] (672)
95: 【USD/JPY】ドル円専用スレ Part29940【$\】 (664)
6: 【韓国経済】50年で最悪の状況を迎えている[12/05] (647)
49: 所さん!大変ですよ「見てよし!食べてよし! (珍)深海魚 大集合」 (646)
42: 科捜研の女 #23★3 (645)
54: VS嵐 (644)
962: 【元剛力】前澤氏「子供がいます。結婚していないお母さんとの…」 剛力との破局真相も語る (638)
2753: さくら学院☆3101時間目 (633)
50: ネーミングバラエティー 日本人のおなまえっ!選【ウソのようなホントのお名前】★2 (630)
760: Fate/GOスレ (624)
33: ☆映画実況13933 狼よさらば #4 (624)
932: 護衛艦「いずも」の仰天空母改造案画像がリーク。アングルドデッキ、カタパルト・・・・w (616)
1014: 【PSO2】PHANTASY STAR ONLINE2【30281】 (606)
1082: 【れいわ】#山本太郎 さん、消費税5%で合意しない限り、野党共闘に参加しないと明言 (596)
1091: 【乗り物】JALの「幼児マーク」が炎上!泣き声だけが「迷惑」?「隣が肥満」問題も深刻化 (594)
2863: 地震 [485983549] (589)
963: 【芸能】「一万円札を偽造された方を発見しました」公開した写真は“旧札”…アイドル運営の注意喚起に失笑集まる (
2686: BABYMETAL ★6326 (584)
1154: 【飲食宅配代行】ウーバーイーツ、配達員の報酬引き下げ 団体交渉も拒否 (584)
2804: ◾ 21:00〜 モーニング娘。'20 全国同時握手会抽選会 (563)
922: アーモンドアイ 有馬記念出走の方向 (561)
52: 【マターリ】NHKスペシャル 体感 首都直下地震「DAY4 危機を生きぬくために」 ★2 (557)
63: 艦これスレリンク24時間レース (551)
944: ポケモン剣盾は何故成功したのか (528)
5: 【生活保護不正受給】 共産党は弱者の味方のふりをして貧困者を食い物にしています。 騙されてはいけません! (523
964: 【芸能】宮迫博之が高級マンションから引っ越し のしかかる巨額税金 (506)
52: 実況 ◆ フジテレビ 90888 (505)
20: 2年間不稼働の口座に手数料、三菱UFJ銀検討 年1200円 (493)
8: 【新潟女児殺害】「死刑でも足りぬ」 無期懲役判決に遺族は悔しさ ★2 (490)
1042: 【イートイン脱税】なぜ私たちをこんなに「ムカつかせる」のか? ★3 (487)
2801: ■ 加賀楓・佐々木莉佳子(副音声) ■ 『モトカレマニア』#08【物語は最終章へ!究極の匂わせ女子現る】 ■
46: 【マターリ】報道ステーション (482)
94: 【GBPUSD】ポンドルは飛んでいくPART14 (480)
2935: 野党、異例の国会の40日延長を要求 安倍首相に説明求め 自民は絶句 [214127477] (475)
2781: 正直これは流行る前から知ってたぞって自慢したいもの [169249397] (460)
1005: ジャンプ打ち切りサバイバルレースPart3134 (457)
81: VIP深夜の変則雑談スレ (444)
40: 【マターリ】科捜研の女 (433)
2716: 【幸福の科学】なぜ新,木,優,子はハロプロに関わってくるのか★2 (427)
1043: 【企業】柿ピーの黄金比率は? 「6対4」の亀田製菓が変更検討 最多だった回答は「7対3」 (417)
1044: 【トヨタ】新小型SUV「ライズ」3万台突破 発売1カ月 (413)
901: 【画像】 FNS歌謡祭で槇原敬之さんが放送事故wwwwwwwwwwwww (407)
1011: 【韓国】「倭系」前方後円墳に改めて注目…反日感情根強い中、研究者は限られていたが[12/5] (396)
1015: ナマコ会場 (391)
15: 慰安婦バッジをつけて日本に渡った人気俳優のパク・ボゴムに、韓国人が称賛の声 (389)
976: 超極暖ヒートテックが真冬でも、汗ばむくらい温かいとほざいていたゴミクズども出てこいやゴラァ!!!!! (389
54: とらせん 全レス (386)
68: 【画像】まんさん「子供がわがままばかり言うからタブレット奪って壊して捨ててやったw子供の泣き顔と残骸見て(パシャ
56: 直撃!シンソウ秘書面接SP★6 (381)

上位板 人気

28: くだすれFORTRAN(超初心者用)その6 (995)
18: くだすれPython(超初心者用) その37 (992)
975: Excel VBA 質問スレ Part63 (987)
165: 今までみた絶望的なソースコード (986)
115: Visual Studio 2015 Part8 (982)
813: PowerShell -Part 3 (982)
289: データ構造,アルゴリズム,デザインパターン総合スレ 3 (968)
985: ふらっと C#,C♯,C#(初心者用) Part145 (963)
437: 【えっ】Perlに未来はあるのか?【終わり?】 (962)
311: Pythonについて(アンチ専用) (951)
914: WPF(.NET4.x, .NET Core) GUIプログラミング Part23 (941)
90: (939)
9: Visual Studio Code / VSCode Part6 (935)
10: 【論理】Prolog【初心者】 (933)
12: VBAなんでも質問スレ Part2 (927)
73: UNIXプログラミング質問すれ Part10 (926)
66: .Net Core / Net ASP Core (922)
417: C#で仕事ある? (921)
291: 圧縮・復元 相談室 (919)
102: くだすれDelphi(超初心者用)その57 (910)
173: OpenCLプログラミング#1 (899)
231: MSX-BASICの奥義を伝授するスレ (898)
138: 2 part forth (887)
858: Ruby 初心者スレッド Part 65 (886)
223: なあ、再帰関数好きな人いる? パート3 (885)
120: 【モダン推奨】Perlについての質問箱 50箱目 (883)
306: C#,C#の宿題片付けます。 (880)
297: proce55ing プログラミングアート全般 (880)
501: クラス名・変数名に迷ったら書き込むスレ。Part28 (880)
48: 任天堂「今後C++は捨てJavaScriptで開発していく」 (875)
434: monazilla Part 6 (871)
172: 【GUI】wxWidgets(旧wxWindows) その5【サイザー】 (863)
542: Windows 10 UWPアプリ開発 Part 2 (863)
208: オブジェクト指向は愚かな考え。この世は計算式 ★3 (861)
179: 米国国防省の標準高等言語エイダ(Ada)を語れ! (856)
571: Git 16 (854)
426: 集合論に基づいた言語を作りたい (854)
342: CVS導入スレ〜 Rev.3 (854)
232: 【Delphi互換!?】FreePascal/Lazarus その2【GPL】 (851)
612: Tapestryについて語ろうよ! (838)
422: 動的言語で大規模開発 (832)
191: OpenGL 2.0 専用スレ (831)
130: MVVMについて語ろう (824)
877: 関数型プログラミング言語Haskell Part32 (823)
313: C#は糞2.0 (823)
242: 【O3D】HTML5用 3D API WebGL 【Canvas:3D】 (814)
818: VBSで便利なプログラムを作れスレ 2 (809)
768: C++相談室 part138 (807)
304: WindowsDDK各種についてのスレ (806)
890: Win32API質問箱 Build125 (803)
273: pythonがこの先生きのこるには (803)
852: 文字コード総合スレ Part12 (794)
436: 暇だから最強のメモ帳つくらね?【java】 (793)
89: 【License】ライセンス総合【利用許諾】 (791)
475: 【会津】パソコン甲子園2004【若松】 (787)
271: メガデモを語る fr-08 (783)
351: 【汚物】痛い変数名・関数名【破廉恥】 (768)
431: Perlについて (766)
944: Rust Part7 (762)
146: delphiで作った有名ソフトって何があるの? (757)
309: JavaScriptは消滅すべきだったよな (748)
91: 【iPhoneも】Titanium Mobileスレッド【Androidも】 (745)
321: ■暗号技術【ROUNDsurea】■ (743)
86: datファイルを共有するP2Pソフト o2on 17dat (732)
354: Java Web Application Framework総合 ver2 (730)
210: 【C++】マイナーGUIツールキット (724)
136: 静的型付け言語の潜在開発生産性は今の100倍 ×5 (723)
286: 【計測】LabVIEW相談室【制御】 (713)
64: GCは失敗。メモリは自分で管理せよ! その2 (704)
75: VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR
121: 【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (696)
112: △△もっとStruts2の良さを教えてくださいSsssion6 (689)
717: C++でXML(主にxerces)やろう! (688)
382: 【上流社会】MSDNサブスクリプション総合【最先端】 (681)
234: 【SICP】計算機プログラムの構造と解釈 Part3 (677)
324: mallocの後にfree不要と言うバカいるの?Part2 (672)
332: Ruby>>>>>Java (670)
715: GARMIN社のGPSのプログラム (667)
439: Java 高速GUI SWT 3 (664)
177: 【アンチ】関数型言語は使えない【玩具】 2 (662)
603: Xamarin Part6 (660)
432: sizeof(char)が必ず1でも、省略すべきではない (657)
256: ネットワークプログラミング相談室 Port30 (654)
108: テストしにくいコードをテストする方法 その2 (652)
331: こんなプログラミング言語は嫌だ! (649)
793: 自然言語処理スレッド その5 (649)
16: ☆★Java質問・相談スレッド182★★ (649)
336: C++/TemplateMetaProgramming (649)
197: 【MACRO】Google Apps Script 質問スレ【DRIVE】 (646)
87: HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net (642)
92: 【入門】Common Lisp その11【質問よろず】 (640)
211: 「コンパイラ・スクリプトエンジン」相談室16 (638)
838: 【.cmd】 バッチファイルスクリプト %13 【.bat】 (635)
971: 【統計分析】機械学習・データマイニング26 (635)
261: C++は難しすぎ 難易度:4 (635)
415: 俺主催囲碁プログラミングコンテスト (634)
694: プログラミング未経験→月4万 (633)
107: Smalltalk総合 Squeak Pharo (632)
151: Subversion r15 (632)
98: バージョン管理システムについて語るスレ10 (624)
986: オブジェクト指向ってクソかよPart5 (619)
442: 【Java】Wicket【HTML】 (618)
370: Visual Studio IDE環境 (615)
88: 結局プログラム作るのってWinとLinuxどっちがいい? (612)
39: お前らプログラミング言語どうやって覚えたんや? (607)
58: C/C++の宿題片付けます 170代目 (607)
380: ***Javaのオススメ入門書*** 『創るJava』 3.0 (607)
433: 新言語を開発したい (607)
435: 今まで見た中で一番すげーコメント (605)
77: C言語なら俺たちに聞け パート0001 (605)
30: Cygwin + MinGW + GCC 相談室 Part 8 (604)
329: 【マック】Macintoshプログラミング質問箱 (603)
233: 【コメント】doxygen【コンソメ】 (599)
47: 3Dアルゴリズム全般 (598)
357: 訃報: C 言語の開発者、デニス・リッチー氏が死去 (594)
973: Pythonのお勉強 Part62 (592)
642: 師匠!1週間よろしくお願いするぞ! (586)
798: UWSC初心者用スレ (573)
444: 国産オープンソースDIコンテナSeasar2 その16 (570)
303: Microsoft Silverlight その9 (570)
733: BASICの宿題はお前にまかせた (562)
403: 日下部陽一著 作ってわかるCプログラミング(第6版) (557)
124: StackOverflowについて語るスレ (550)
17: 人工知能ディープラーニング機械学習の数学 ★2 (545)
249: Message Passing Interface (MPI) 統合スレ (543)
123: 疑似乱数2 (543)
202: JavaScript情報交換所(プログラミング既習者専用) (543)
97: Julia Juno Jupyter part1 (541)
226: BrainFuck Part.3 (538)
200: GCCについて part10 (538)
67: Androidプログラミング質問スレ revision53 (537)
257: VisualBasic6.0 対 VisualBasic .NET 2003 (513)
59: 【独学】一人で勉強する奴らのスレ【自習】 (507)
413: 簡単なプログラム言語って何? (505)
19: 古代VBプログラマ質問スレ(Ver.6.0 まで) part65 (496)
65: Perl初心者スレ(マジレス回答) (488)
404: COM (487)
365: 【Java】DIコンテナって本当に便利か? (484)
338: 【コボル】COBOL不要論【ただのDSLだよね?】 (481)
68: MATLABプログラミング 質問箱 その4 (481)
929: Kotlin 6 (477)
339: NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (477)
991: くだすれPython(超初心者用) その45【Ruby禁止】 (473)
145: アセンブラ 13 (466)
868: Android Studio Part3 (463)
356: 今だからこそ2ch代替サービスの実装を考えるスレ (459)
958: C言語なら俺に聞け 153 (457)
430: 【信者】C++の問題点【アンチ】 (452)
174: Java低速GUI Swing 10 (443)
325: D言語は多分コケると思っている人の数→ (438)
82: マルチスレッドプログラミング相談室 その9 (436)
14: Gtkプログラミング on Windows!!! (434)
258: TopCoder (424)
287: 【C++】高速化手法【SSE】2 (423)
996: 次世代が造った言語 blawn (422)
671: C言語相談室(上級者専用) (421)
220: Google Maps API 質問箱 (399)
423: クロージャって何がいいの? (397)
144: ゲームプログラムなら俺に聞け33 (396)
905: 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 (394)
653: Excel Python 質問スレ (392)
85: 【Java標準GUIライブラリ】 JavaFX スレッド (391)
438: 「OS自作入門」 (390)
128: Mathematicaプログラミング 質問箱 その1 (388)
270: 文字コードの種類は何故複数あるのでしょうか? (384)
773: 構造化プログラミングはまだ必要ではないのか? (382)
619: おまいらはディープラーニングの検定試験受けるの? (382)
43: スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟] (382)
348: Borland C++ Compiler オ ワ タ (381)
536: 本当に必要ものは人工知能ではなくて検索エンジン (381)
44: VB.NET質問スレ(Part44) (380)
408: Borlandにはやられた... (379)
362: 逆コンパイラCodeReverseを作る (379)
349: JavaScript 4 (378)
133: 【DI】Java Spring Frameworkを語るスレ 5.0 (371)
655: ExcelVBAで勤務表を作ろう (371)
613: ねねっちと一緒にプログラムを勉強するスレ第3話 (370)
46: 懐かしのMS-DOSプログラミング ver.2 (370)
288: Google App Engine for java (369)
441: 0から始める2chブラウザfor超漢字 "2ch de BTRON" (367)
106: PHPがいかに駄目言語であるかをちゃんと説明 Part.2 (364)
284: くだらないアルゴリズムを考えるスレ (363)
384: Google NaCl プログラミング 2mol (361)
344: プログラマー目指してるんだが色々と教えてくれ (360)
244: 2ちゃんねる互換P2P匿名掲示板の実装を考える 1 (359)
206: C/C++のライブラリ総合スレ (358)
379: 【分散型バージョン管理】 Mercurial 2【hg】 (357)
7: MFC相談室 mfc23d.dll (355)
662: 【node.js】サーバサイドjavascript 5【Nashorn】 (355)
700: TypeScript part3 (355)
808: プログラマは大卒じゃないと就活厳しいってホント? (354)
276: プログラム関係の雑誌について (352)
80: NetBeans Part7 (352)
305: GPGPU#5 (351)
166: Boost総合スレ part10 (343)


 

人気スレ 上位板 ブックマ-ク見る