C++有效数字
如何在 C++ 中进行涉及有效数字的数学运算?我希望它能够正确处理化学和物理实验的测量数据。一个例子:65 / 5 = 10。我需要去掉不需要的小数位并用 0 替换一些数字。
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何在 C++ 中进行涉及有效数字的数学运算?我希望它能够正确处理化学和物理实验的测量数据。一个例子:65 / 5 = 10。我需要去掉不需要的小数位并用 0 替换一些数字。
谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
这应该可以满足您的需求:
This should get you what you need:
这可能不是最有效的方法,但您可以创建自定义 sig Fig 数据类型。
这可能需要做很多工作,但如果你正确实现这一点,它可能是一种非常灵活的方式来表示和使用 sig Figs 进行计算。
This may not be the most efficient way, but you can create a custom sig fig data type.
It can be a lot of work, but if you implement this right, it can be a really flexible way to represent and do calculations with sig figs.
这很困难,因为有效数字是十进制概念,而计算机讲的是二进制。您可以使用十进制数字类(我不知道任何),或使用 boost::interval,这是最接近您想要实现的目标。
It is hard because significant figures are a decimal concept, and computers speak binary. You can use decimal number classes (I don't know of any), or use boost::interval, which is the closest to what you certainly want to achieve.
这取决于您如何展示它们。如果您使用 printf 系列,则设置精度 (
sprintf(buffer, "%.2f", myfloat)
)。如果您使用 ostreams,则调用 precision 函数来设置小数位数。如果您正在寻找更科学的 sig Figs 方法,则必须编写一个自定义函数来根据浮点数的当前值确定精度。That depends on how you are displaying them. If you are using the printf-family, you set the precision (
sprintf(buffer, "%.2f", myfloat)
). If you are using ostreams, you call the precision function to set the number of decimal places. If you are looking for the more scientific method of sig figs, you'll have to write a custom function that determines the precision based on the current value of the float.这是一个对我有用的快速 C++11 解决方案:
here is a quick C++11 solution that worked for me:
现在 C++20 正式支持
std::format
类,您可以在 C++ 中获得printf
样式的格式设置:Now that C++20 officially supports the
std::format
class, you can getprintf
-style formatting within C++:那么 math.h 中有 优秀的数学库
还可以将数字存储在浮点数中,双打或长双打将允许更精确的操作。
浮点型提供 7 位有效数字,而双精度型提供 16 位有效数字。
源
另外,在打印时,人们通常使用 _snprintf 或 printf 和您可以格式化这些双精度数,浮点数到您想要的精度,例如:
Well there are good math libraries in math.h
Also storing your figures in floats, doubles or long doubles will allow for more precise operations.
Floats offer 7 significant digits while doubles offer 16 significant digits.
source
Also when printing out usually people use _snprintf or printf and you can format those doubles, floats to the precision you want like: