Ticket #39735

Win版 x64デバッグ構成のとき_controlfp_sでアサーション発生

Open Date: 2019-11-09 13:45 Last Update: 2019-11-09 17:43

Reporter:
Owner:
Type:
Status:
Closed
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

x64デバッグ構成でMIDITrailをビルドして起動し、MIDIファイルをロードすると、 SMFPUCtrl::Startの_controlfp_sで以下のアサーションが発生する。 リリース版モジュールで実行した場合は例外は発生しない。

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Debug Assertion Failed!

Program: C:\Users\wada\source\repos\MIDITrail\x64\Debug\MIDITrail.exe
File: minkernel\crts\ucrt\src\appcrt\tran\amd64\ieee.c
Line: 106

Expression: (mask&~(_MCW_DN|_MCW_EM|_MCW_RC))==0

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

Ticket History (3/4 Histories)

2019-11-09 13:45 Updated by: yknk
  • New Ticket "Win版 x64デバッグ構成のとき_controlfp_sでアサーション発生" created
2019-11-09 13:47 Updated by: yknk
Comment

原因

SMFPUCtrl::Startで浮動小数点の精度制御を行うため、_controlfp_sを呼び出していた。 しかし_controlfp_sは、x64プラットフォームにおいて浮動小数点の精度制御(_MCW_PC)を サポートしておらず、アサーションが発生した。

浮動小数点の精度制御は、以下のチケットで処理を追加している。

  • #23347 ピアノロールレインでキー押下タイミングとピアノロールがずれる
2019-11-09 13:47 Updated by: yknk
Comment

対策

テストした結果、x64環境では浮動小数点の精度制御を実施しなくても、 演算精度が保たれていることを確認した。

SMFPUCtrl::StartとSMFPUCtrl::Endにて、x64向けビルド時に浮動小数点の 精度制御(_MCW_PC)を実行しないように修正する。

2019-11-09 17:43 Updated by: yknk
  • Resolution Update from None to Fixed
  • Status Update from Open to Closed

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login