Visual Studio 2010 Part21 (289レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
238: デフォルトの名無しさん [] 2021/11/09(火) 10:38:25.69 ID:dO6zD4He(1/7) AAS
VisualStudio2010のC#で作成した2つのアプリ(A,Bとする)と1つのDLL(C.dllとする)
があって、C.dll内の関数のfloatやdoubleを使った計算が、Aから呼び出した場合とBから呼び出した場合
で異なる(誤差が出る)んだけど、何が原因なんだろう?ターゲットプラットフォームの
問題かと考えてAとBをx86にそろえたけど変わらない。
240: デフォルトの名無しさん [sage] 2021/11/09(火) 11:24:03.51 ID:dO6zD4He(2/7) AAS
>>239
早速の返信ありがとうございます。
ビンゴかもしれません!
今、条件を変えて調査中です・・
242: デフォルトの名無しさん [sage] 2021/11/09(火) 12:29:22.98 ID:dO6zD4He(3/7) AAS
238です。
宣言は確かに異なっていたのですが、合わせてみても結果はかわりませんでした。
244: デフォルトの名無しさん [sage] 2021/11/09(火) 13:44:02.60 ID:dO6zD4He(4/7) AAS
誤差の出る部分を絞り込むと、math.sqrtに行き当たりました。
こんな感じです。
A:Math.sqrt(14) = 3.74165749549866
B:Math.sqrt(14) = 3.74165738677394
249: デフォルトの名無しさん [sage] 2021/11/09(火) 14:59:14.95 ID:dO6zD4He(5/7) AAS
>>246
>>247
ありがとうございます。ヒントになりそうなので、こちらの方向で調べてみます。
250: デフォルトの名無しさん [sage] 2021/11/09(火) 16:31:34.45 ID:dO6zD4He(6/7) AAS
>>246、>>247のヒントで、C.dll内にあるMath.Pow, Math.Sqrt, Math.Ceilingなど、
floatからdoubleにキャストされてしまう関数を再度floatにキャストしたり、小数部の
誤差を切り捨てるで、誤差を減らせることがわかりました。(なかったことにするとも言う)
最悪これでいきます。
AとBのアプリからC.dllの同じ関数を同じ引数で呼んでいるのに、なぜ戻り値が
異なるのかはわかっていません。そこがわかればスッキリ直せそうなのですが。
252: デフォルトの名無しさん [sage] 2021/11/09(火) 18:24:21.94 ID:dO6zD4He(7/7) AAS
どこかで型変換してしまっているんですかねぇ。。
お伝えできていませんでしたが、A、BからC.dllへ渡す引数はすべてInt型です。
C.dll内の数値計算でfloat,doubleが使われています。C.dll内で型変換を
してしまっているのなら、A,Bどちらからも条件は同じはずなのに・・
私としてはVisualStudioの設定の問題かと思ってこちらに書き込みましたが、
スレチな可能性が出てきましたので、この辺でおいとましようかと思います。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.014s