Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 8个字节,可以按照您喜欢的方式进行编码,而不会引入任何错误,而不是浮动表示本身中已经存在的错误。VTC不清楚您在问什么。@user1095108浮点数不能表示您可以作为字符串文字写入的所有内容。所以一旦你转换成浮点数,你就进行了有损转换。但是,如果您只是对_C++_Encoding_Floating Point_Ascii - Fatal编程技术网

C++ 8个字节,可以按照您喜欢的方式进行编码,而不会引入任何错误,而不是浮动表示本身中已经存在的错误。VTC不清楚您在问什么。@user1095108浮点数不能表示您可以作为字符串文字写入的所有内容。所以一旦你转换成浮点数,你就进行了有损转换。但是,如果您只是对

C++ 8个字节,可以按照您喜欢的方式进行编码,而不会引入任何错误,而不是浮动表示本身中已经存在的错误。VTC不清楚您在问什么。@user1095108浮点数不能表示您可以作为字符串文字写入的所有内容。所以一旦你转换成浮点数,你就进行了有损转换。但是,如果您只是对,c++,encoding,floating-point,ascii,C++,Encoding,Floating Point,Ascii,8个字节,可以按照您喜欢的方式进行编码,而不会引入任何错误,而不是浮动表示本身中已经存在的错误。VTC不清楚您在问什么。@user1095108浮点数不能表示您可以作为字符串文字写入的所有内容。所以一旦你转换成浮点数,你就进行了有损转换。但是,如果您只是对浮点数的字节进行编码,则FP->string是一种完美的方式。@user1095108您无法阅读和理解我写的内容。与IEEE-754表示相关的错误与存储为ASCII还是二进制完全无关。特别是在某些语言中,0.1可能被视为Rational类型,而


8个字节,可以按照您喜欢的方式进行编码,而不会引入任何错误,而不是浮动表示本身中已经存在的错误。VTC不清楚您在问什么。@user1095108浮点数不能表示您可以作为字符串文字写入的所有内容。所以一旦你转换成浮点数,你就进行了有损转换。但是,如果您只是对浮点数的字节进行编码,则FP->string是一种完美的方式。@user1095108您无法阅读和理解我写的内容。与IEEE-754表示相关的错误与存储为ASCII还是二进制完全无关。特别是在某些语言中,
0.1
可能被视为
Rational
类型,而不是
Floating
类型。@user1095108:您不应该真正关心这个问题。转换为逗号后有足够小数位的字符串(如果您希望这样的精度,可能是100位)(在科学记数法中)。或者,如果你想存储它,以二进制形式(二进制文件,而不是ascii)存储浮点数。当然,对于机器来说,“对于人类”,自动表示基数为10。希望能够重新打开。虽然17位十进制数字确实足以唯一标识每个IEEE-754双操作数(例如,通过使用格式
%23.16e
),从而允许往返转换,但许多转换例程都包含一些缺陷,这会影响转换。这篇博客指出了一些这样的缺陷:。另一种基于二进制表示的浮点操作数的打印方法存在于C中(但我认为不是C++,虽然它可以作为编译器扩展):<代码> %A//C>格式,如代码> %21.12A .@ NJUFFA,如果17位十进制数字不足以进行往返行程,这是库中一个非常严重的错误,严重到足以使它无法用于任何浮点工作。IEEE非常明确地规定了需要什么。我在上面的回答中指出了十六进制表示法的可能性;它是C++11的一部分。(也就是说,在C中使用<代码> %A”/代码>时,不应该指定精度;C++会忽略它,但是在C中,它将取代库自己的选择,这是确保精确表示的最小限度。)James Kanze:我的评论不是用来表示与你的答案不一致的。只是指出存在剩余风险,因为直到最近,各种常用的转换例程(包括gcc)显然都有缺陷(具体案例请参见我提到的博客)。同样地,我提到的
%a
格式是为了给您所说的十六进制输出添加一些额外的信息。我不知道
%a
的精度说明符问题,谢谢你指出了这一点。当然,对于机器,“对于人类”,自动表示基数10。希望能够重新打开。虽然17位十进制数字确实足以唯一标识每个IEEE-754双操作数(例如,通过使用格式
%23.16e
),从而允许往返转换,但许多转换例程都包含一些缺陷,这会影响转换。这篇博客指出了一些这样的缺陷:。另一种基于二进制表示的浮点操作数的打印方法存在于C中(但我认为不是C++,虽然它可以作为编译器扩展):<代码> %A//C>格式,如代码> %21.12A .@ NJUFFA,如果17位十进制数字不足以进行往返行程,这是库中一个非常严重的错误,严重到足以使它无法用于任何浮点工作。IEEE非常明确地规定了需要什么。我在上面的回答中指出了十六进制表示法的可能性;它是C++11的一部分。(也就是说,在C中使用<代码> %A”/代码>时,不应该指定精度;C++会忽略它,但是在C中,它将取代库自己的选择,这是确保精确表示的最小限度。)James Kanze:我的评论不是用来表示与你的答案不一致的。只是指出存在剩余风险,因为直到最近,各种常用的转换例程(包括gcc)显然都有缺陷(具体案例请参见我提到的博客)。同样地,我提到的
%a
格式是为了给您所说的十六进制输出添加一些额外的信息。我不知道
%a
的精度说明符问题,感谢您指出这一点。
double d{.1};

auto const s(::std::to_string(*reinterpret_cast<::std::uint64_t*>(&d)));
::std::uint64_t n(::std::stoull(s));

auto const e(*reinterpret_cast<double*>(&n));

assert(d == e);
std::cout.setf( std::ios_base::fixed | std::ios_base::scientific,
                std::ios_base::floatfield );