避免输出为负零的最佳方法是什么

what is the best way to avoid negative zero in output?

本文关键字:最佳 方法 是什么 输出      更新时间:2023-10-16

正如这个问题所说,浮点数中的负零和正零之间存在一些差异。我知道这是因为一些重要的原因。我想知道的是一个短代码,以避免输出中的负零。

例如在下面的代码中:

cout << fixed << setprecision(3);
cout << (-0.0001) << endl;
打印"-0.000

",但我想要"0.000"。

请注意,所有其他负数(例如 -0.001)仍应打印前带有减号,因此简单地* -1不起作用。

根据您的精度进行尝试。

cout << ((abs(ans) < 0.0005)? 0.000: ans) << endl;

怎么样:

cout << (value == 0.0 ? abs(value) : value)  << endl;

如果你关心任意精度,而不是仅仅在 3 的固定精度,你需要一点点工作。 基本上,您必须在cout之前进行预检查,以查看该数字是否会以您不喜欢的方式格式化。

你需要找到数字的数量级,看看它是否会丢失不精确的数字,只留下符号位。

您可以使用数字绝对值的 10 对数为底来执行此操作。 如果结果的负数大于您设置的精度,则该数字将以您不希望的方式显示。

0.0001 的 log10 是 -4。

(-4) 的负数为 4。

4> 3(任意精度)因此,该值将不愉快地显示。

在非常糟糕的伪代码中:

float iHateNegativeZeros(float theFloat, int precision)
{
   if((theFloat < 0.0f) &&
      (-log10(abs(theFloat)) > precision))
   {
     return -theFloat;
   }
   else
   {  
     return theFloat;
   }
}