This私がしたコードです:これらのステップラウンドは同等ですか?
#include <iostream>
#include <limits>
#include <math.h>
#include <stdio.h>
typedef std::numeric_limits<double> dbl;
double StepValue(double value) {
return floor(0.5 + value/0.1) * 0.1;
}
void PrintValue(int maxlen, const char *fmt, ...)
{
char buffer[20];
va_list arglist;
va_start(arglist, fmt);
vsnprintf(buffer, maxlen, fmt, arglist);
va_end(arglist);
std::cout << "p: " << buffer << std::endl;
}
int main()
{
std::cout.precision(dbl::max_digits10);
std::cout << std::fixed;
double inputValue = 13.55121341223423457;
std::cout << "v: " << inputValue << std::endl;
double steppedValue = StepValue(inputValue);
std::cout << "f: " << steppedValue << std::endl;
PrintValue(20, "%.1f", inputValue);
}
基本的に、私はinputValue
を取ると私はそれができ最寄りのダブルを使用して、(カンマの後に1桁である)私は必要最寄りの強化値に丸めますそれを表現する(私がsteppedValue
に割り当てるもの)。
、値が13.6
されるように、例えば、inputValue = 13.55121341223423457
を取り、0.1
のステップを使用して(実際13.60000000000000142
による浮動小数点演算にある;しかし、それは点ではない点は、それが概念的に0.6を返すことです)。
その後、私は同じinputValue
をとり、0.1
のステップを再度考慮してvsnprintf
関数を使用して印刷します。どちらが正しく印刷されますか13.6
。
私の質問は:私のステップ関数またはvsnprintf
の使用の間に異なるステップ値に丸められたANY inputValue
が存在する可能性がありますか?すなわち、2つの結果が私のステップ関数から得られ、vsnprintf
は、異なるステップで計算/印刷値などの矛盾している可能性がありますか?
あなたの投稿をコードの*テキスト*で編集してください。ファイアウォールはコードページへのリンクをブロックします。画面のスナップショットはしないでください。 –
@ThomasMatthews:done;)ありがとう – markzzz