2017-02-23 17 views
-2

基本的なC++コード(以下に含まれています)があります。 (math.hに含まれるcos関数を含む)発生するすべての乗算をカスタム命令で置き換えることができるようにしたい。私は自分のメインの中でカスタム命令を直接呼び出すことができますが、 'cos'は引き続き古い乗算命令を使用します。すべての乗算をカスタム命令に置き換える

私は演算子のオーバーロードを検討していましたが、この関数を正しく作成できませんでした。

#include <iostream> 
#include <string> 
#include <math.h> 

int main() 
{ 
    int a = 2; 
    int b = 5; 
    std::cout << "mult: " << a * b << std::endl; 
    std::cout << "cos: " << cos(b) << std::endl; 
    return 0; 
} 

私が望むようにこのカスタム命令を実装するのに最適な方法は何ですか?

+5

私は*なぜ*あなたがこれをやりたいのですか? (PS:あなたが望むものは不可能だと確信しています。演算子のオーバーロードは基底型のためには機能しません。したがって、あなたがコントロールするカスタム型を使用するコード全体をリファクタリングしない限り...) – Borgleader

+0

NIOSIIは浮動小数点ハードウェア乗算。ハードウェアを導入しているので、私のcos計算も高速化したいと思っています。私は現在カスタム命令を持っていますので、 'a * b'を' custom_instruction(a、b) 'として実行できますが、cosがmath.hライブラリ内にあるので、それらの乗算を変更することはできません –

+3

あなたのコンパイラが使っている 'std :: cos'のバージョンは?コンパイラのソースにアクセスできますか?あなたの 'custom_instruction(a、b)'を使用するのはソフトウェアを掛けたほうが簡単で、プログラムを実際には変更しない方が簡単かもしれません – Caleth

答えて

0

コードに触れることなくいくつかの機能を置き換える方法があります。もちろん、コードをどのように構築しているかによって異なります。 Linuxを使用していると仮定すると、LD_PRELOADを使用して機能を注入できます。ここで

はそれを行う方法についての素敵な説明です:

https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/

それはあなたのケースに正確に適用されない場合、あなたはいくつかのアイデアをつかむか、単にこのクールな機能を学ぶことができます。

0

std::cosは内蔵の浮動小数点型floatdoublelong double(任意の整数型を提供することもできるが、それは内部doubleにキャストです)のためのオーバーロードを提供します。組み込み型の演算子はオーバーロードできません。これはあなたが求めていることをすることができないことを意味します。

あなたが得ることができる最良の方法は、乗算演算子をオーバーロードする独自の数値クラスを作成し、代替乗算の実装を使用して独自の三角関数を作成することです。

関連する問題