Main Content

エラーの解決: データ型の不一致

問題

この例では、y は SumMode プロパティの場合に既定の fimath 設定の FullPrecision を使用します。関数 mysum 内の for ループの反復ごとに、y の語長は 1 ビットずつ増加します。

シミュレーション中でも、MATLAB® ではデータ型が容易に変更できるので、問題は発生しません。ただし、C ではデータ型は静的なままでなければならないので、ビルド時にデータ型不一致のエラーが発生します。

考えられる解決策

for ループ内で添字による代入を使用するように関数を書き換えます。

この例では、y = y + x(n)y(:) = y + x(n) と書き換え、右辺の値が y のデータ型に代入されるようにしています。この代入では、y の numerictype が維持されるため、データ型不一致エラーが発生しません。

元のアルゴリズム新しいアルゴリズム

関数:

function y = mysum(x,T)  %#codegen  
	 y = zeros(size(x), 'like', T.y);
    for n = 1:length(x)
        y = y + x(n);
    end
end

関数:

function y = mysum(x,T)  %#codegen  
	 y = zeros(size(x), 'like', T.y);
    for n = 1:length(x)
        y(:) = y + x(n);
    end
end

型テーブル:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        F = fimath('RoundingMethod', 'Floor')
        T.x = fi([],1,16,11, F);
        T.y = fi([],1,16,6, F);
    end
end

型テーブル:

function T = mytypes(dt)
	switch(dt)
        case 'fixed'
        F = fimath('RoundingMethod', 'Floor')
        T.x = fi([],1,16,11, F);
        T.y = fi([],1,16,6, F);
    end
end

参考

関連するトピック