フロート印刷およびフォーマットライブラリを作成していますが、末尾の0桁を印刷しないようにしたいと考えています。
このために、小数点以下N桁以内の最後の非ゼロ桁を正確に判別したいと思います。これを行うための特別な効率的な方法があるかどうか疑問に思います。
フロート印刷およびフォーマットライブラリを作成していますが、末尾の0桁を印刷しないようにしたいと考えています。
このために、小数点以下N桁以内の最後の非ゼロ桁を正確に判別したいと思います。これを行うための特別な効率的な方法があるかどうか疑問に思います。
この(重要な)問題は完全に解決されました。アイデアは、正確に十分な桁数を印刷することです。これにより、印刷された桁数を浮動小数点数に変換し直した場合、最初の数値が正確に得られます。
関連する論文は、RobertBurgerとR.KentDybvigによる「浮動小数点数の迅速かつ正確な印刷」です。こちらからダウンロードできます。
float を文字列に変換してから、末尾のゼロを削除する必要があります。
これはあまり効率的ではないと思いますが、おそらくもっと単純なアルゴリズムはないと思います
明らかな解決策は、すべての桁をaに入れ、char[N]
印刷する前に最後の桁を確認することです。しかし、私はあなたがそれについて自分で考えたに違いない。
私が考えることができる他の唯一の解決策は、の小数部がゼロ以外の数字を2^(-n)
持っているということです。n
したがって、2進表現の最後の非ゼロがである場合、10進展開には2^(-n)
正確にn
非ゼロの数字が含まれます。したがって、2進表現を見ると、10進表現について何かがわかります。
ただし、丸めによって後続のゼロが追加される可能性があるため、これは部分的な解決策にすぎません。
std::cout.precision(n);
//ここで、n は小数点以下に表示する桁数です。精度制限の前にゼロが存在し、10 進数の後に存在する場合、それは自動的に回避されます。
eg. std::cout.precision(5);
次に、私の条件は 5.55000 と評価され、5.55 のみが出力されます