以下のクラスは音符を表すことになっています。整数のみを使用して、音符の長さ(たとえば、1/2音符、1/4音符、3/8音符など)を保存できるようにしたい。ただし、不規則な長さのノートを扱うまれなケースでは、浮動小数点数を使用して長さを格納できるようにもしたいと思います。
class note{
string tone;
int length_numerator;
int length_denominator;
public:
set_length(int numerator, int denominator){
length_numerator=numerator;
length_denominator=denominator;
}
set_length(double d){
length_numerator=d; // unfortunately truncates everything past decimal point
length_denominator=1;
}
}
長さを格納するためにdoubleではなく整数を使用できることが重要である理由は、浮動小数点数の過去の経験では、値が予期せず不正確になることがあるためです。たとえば、16であるはずの数値が、浮動小数点を使用して16.0000000001または15.99999999999(通常は一部の演算に耐えた後)として不思議に格納されることがあります。これにより、同等性のテスト時に問題が発生する可能性があります(16!= 15.99999999999のため)。
変数をintからdouble(値だけでなく変数)に変換することは可能ですか?そうでない場合は、タイプに必要なものに応じて、整数または倍精度浮動小数点数を使用してノートの長さを格納できるようにするために、他に何ができますか?