Simulink Embeded Coderで出力され​た関数の引数のデータ​型をSingle型に​すると正しく出力され​ない

1 回表示 (過去 30 日間)
和也
和也 2022 年 12 月 17 日
コメント済み: Atsushi Ueno 2022 年 12 月 18 日
Simulink Embeded Coderにて2d lookuptableのブロックを出力しdllファイルの関数としてvb.net環境下で利用しようとしています。
この関数の引数をsingle型にすると正しく出力されず関数の戻り値はゼロになってしまいます。
2d lookuptableのブレークポイント値の型をsingleにして型を合わせていますが、singleの引数として
関数宣言し、single型の変数を引数として計算させると戻り値がゼロになってしまいます。
型を合わせずdouble型として関数宣言するとうまくいきます。
何故single型を使うとうまくいかなくなるのでしょうか?
  3 件のコメント
和也
和也 2022 年 12 月 18 日
step関数の引数はrealT型で生成されるとレポートに記載されていますが、
このrealT型はvisual basicでは定義されてません。
visual basicのコード中で step関数を呼び出して引数を 2d_lookuptable_step( arg1 as single,arg2 as single) と引数を
型指定して呼び出すと失敗します。
型指定しなければうまくいきます。visual basicではrealT型が存在しないので型指定することができないので
型指定して使用してはいけないということになりますかね。少し気持ち悪いですが。
realT型はsingleとほぼ同じ値のレンジを網羅してますが、double型だと充分大きいので
double型を指定したとしても上手くいきます。
これらを踏まえると値のレンジ縮小へキャストする型指定に対しては注意が必要で
型指定をしないか値のレンジ拡大側へのキャストにする、が結論になりますでしょうか?
Atsushi Ueno
Atsushi Ueno 2022 年 12 月 18 日
(´・ω・`) ゼンゼン ワカンナイ...
>visual basicではreal_T型が存在しないので型指定することができないので
MATLABにもreal_T型はありません。下記説明によればreal_T は double に対する typedef です。
>これらを踏まえると値のレンジ縮小へキャストする型指定に対しては注意が必要で、型指定をしないか値のレンジ拡大側へのキャストにする、が結論になりますでしょうか?
動きを確認してませんし、目ぼしいドキュメントにも辿り着けないので、何とも言えないです。
単精度浮動小数点型 (Single) (Visual Basic) を見ると、MATLABとVisual BasicのSingle型は同じに見えますが、メモリ配置が合致していないとか、同じアドレスを見れてないとか、何か違いが生じるのかもしれません。
>Single の既定値は 0 です
との事なので、アクセスしたつもりが実際にはアクセス出来ておらず、規定値の0のままになっているのではないでしょうか?
.NET Frameworkが共通言語基盤の実装であるのなら、MATLABから出力したDLLとも共通型システムに則った型でもってデータをやり取りしたいですね。でもそれってどうすれば良いのでしょう。

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File Exchangeコード生成 についてさらに検索

タグ

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!