【发布时间】:2019-11-12 18:47:47
【问题描述】:
给定两个不同的字符串string s1 和string s2,它们包含相同的十进制数,小数点后的尾随零个数不同,是否始终保证stod(s1)==stod(s2)?
例如:
#include<iostream>
using namespace std;
bool equalConversion(const string& s1,const string& s2)
{
return stod(s1)==stod(s2);
}
int main(int argc, char *argv[])
{
string s1="0.1232340";
string s2="0.12323400";
cout<<"equal conversion: "<<equalConversion(s1,s2)<<endl;
return 0;
}
我尝试为 s1 和 s2 使用不同的值,看起来确实如此,但也有一个强有力的保证,特别是对于不能精确表示为双精度值的非常大或小数字的字符串,因此会被四舍五入到下一个可表示的双精度值。如果最小的较大和最大的较小可表示值距离字符串中的目标数字同样远怎么办?尾随零是否会干扰转换函数stod,使得附加尾随零所选择的双重表示不同于没有它们时选择的双重表示?换句话说:从字符串到双精度的转换是否一致一致?
【问题讨论】:
-
对于
strtod,ISO C++11 参考了 ISO C 标准。其相关部分是 7.20.1.3。并在其中特别编号为第 9 段。根据我的阅读,它似乎无法提供您正在寻找的一致性保证。
标签: c++ floating-point precision