mar*_*zzz 1 c++ floating-point
这是代码:
typedef std::numeric_limits<float> fl;
int main()
{
std::cout.precision(100);
float f1 = 9999978e3;
std::cout << f1 << " (9999978e3 decimal number stored as binary)" << std::endl;
float f2 = 9999979e3;
std::cout << f2 << " (9999979e3 decimal number stored as binary)" << std::endl;
float f3 = 9999990e3;
std::cout << f3 << " (9999990e3 decimal number stored as binary)" << std::endl;
std::cout << "-----^" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
打印:
9999978496 (9999978e3 decimal number stored as binary)
9999978496 (9999979e3 decimal number stored as binary)
9999989760 (9999990e3 decimal number stored as binary)
-----^
Run Code Online (Sandbox Code Playgroud)
存储为二进制的十进制数正确保持第6位9999978e3和9999979e3(即7),但第6位9999990e3是8而不是9.
不应该浮点精度始终保证前6位数?
是的,如果我在第89轮比赛中得到9分,那就不一样了; 这将只在"视觉上"工作/有意义.
稍后(关于处理数字),当我将对该值应用数学时,它将对xxxxx8数字(99999 8 9760)起作用,而不是在数字上xxxxx9.这个数量级为+1.
不是你认为它有保证的方式,不是.
通过提供一个反例,对于IEEE754单精度浮点,最接近的数字
9999990000
Run Code Online (Sandbox Code Playgroud)
是
9999989760
Run Code Online (Sandbox Code Playgroud)
什么是保证的是,你的电话号码和float,当两者都四舍五入到六个显著的数字,将是相同的.这是FLT_DIG您平台上的价值,假设它实现了IEEE754.例如,最接近的float数字9999979000是9999978496.
见http://www.exploringbinary.com/floating-point-converter/
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |