Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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# 此图像缩放代码的合理ε/公差值是多少?_C#_Image_Resharper_Precision_Image Scaling - Fatal编程技术网

C# 此图像缩放代码的合理ε/公差值是多少?

C# 此图像缩放代码的合理ε/公差值是多少?,c#,image,resharper,precision,image-scaling,C#,Image,Resharper,Precision,Image Scaling,Resharper希望我更改此现有代码: if (pic.Height == oldH) { pic.Height *= fX; } ……为此: if (Math.Abs(pic.Height - oldH) < TOLERANCE) { pic.Height *= fX; } ? 注:始终,R#还希望将第二个“if(pic.Height==oldH)”与公差进行比较。如您所知,浮点数可以保持真实的连续值,在大多数情况下,在比较连续值时,如果它们之间的距离小于一个小阈值

Resharper希望我更改此现有代码:

if (pic.Height == oldH)
{
    pic.Height *= fX;
}
……为此:

if (Math.Abs(pic.Height - oldH) < TOLERANCE)
{
    pic.Height *= fX;
}
?


注:始终,R#还希望将第二个“if(pic.Height==oldH)”与公差进行比较。

如您所知,浮点数可以保持真实的连续值,在大多数情况下,在比较连续值时,如果它们之间的距离小于一个小阈值(epsilon),则认为这些值相等,显然整数不是这样的, resharper显示此消息的唯一原因是您正在比较不带th(连续)的浮点值。您需要做的是将图片的高度和宽度属性更改为整数。没有理由首先将图像宽度/高度属性类型设为浮动)
这样做,而不是遵循resharper的自动修复。

正如您所知,浮点数可以保存一个真正的连续值,在大多数情况下,在比较连续值时,如果它们之间的距离小于一个小阈值(ε),则认为这些值相等,显然整数的情况并非如此, resharper显示此消息的唯一原因是您正在比较不带th(连续)的浮点值。您需要做的是将图片的高度和宽度属性更改为整数。没有理由首先将图像宽度/高度属性类型设为浮动)
这样做,而不是遵循resharper的自动修复。

在网上做了一些研究之后,我使用这段代码来比较double

public static bool EqualInPercentRange(this double Value1, double Value2, long Units = 2) {
  long longValue1 = BitConverter.DoubleToInt64Bits(Value1);
  long longValue2 = BitConverter.DoubleToInt64Bits(Value2);
  //
  // If the signs are different, return false except for +0 and -0.
  //
  if ((longValue1 >> 63) != (longValue2 >> 63)) {
    //
    // ReSharper disable once CompareOfFloatsByEqualityOperator
    //
    return Value1 == Value2;
  }

  long diff = Math.Abs(longValue1 - longValue2);

  return diff <= Units;
}
public static bool equalingpercentrange(此双值1,双值2,长单位=2){
long longValue1=位转换器。双字节64位(值1);
long longValue2=位转换器。双字节64位(值2);
//
//如果符号不同,则返回false,但+0和-0除外。
//
如果((longValue1>>63)!=(longValue2>>63)){
//
//ReSharper禁用一次比较OffloatsByQualityOperator
//
返回值1==Value2;
}
long diff=Math.Abs(longValue1-longValue2);

return diff在网上做了一些研究之后,我使用这段代码来比较double

public static bool EqualInPercentRange(this double Value1, double Value2, long Units = 2) {
  long longValue1 = BitConverter.DoubleToInt64Bits(Value1);
  long longValue2 = BitConverter.DoubleToInt64Bits(Value2);
  //
  // If the signs are different, return false except for +0 and -0.
  //
  if ((longValue1 >> 63) != (longValue2 >> 63)) {
    //
    // ReSharper disable once CompareOfFloatsByEqualityOperator
    //
    return Value1 == Value2;
  }

  long diff = Math.Abs(longValue1 - longValue2);

  return diff <= Units;
}
public static bool equalingpercentrange(此双值1,双值2,长单位=2){
long longValue1=位转换器。双字节64位(值1);
long longValue2=位转换器。双字节64位(值2);
//
//如果符号不同,则返回false,但+0和-0除外。
//
如果((longValue1>>63)!=(longValue2>>63)){
//
//ReSharper禁用一次比较OffloatsByQualityOperator
//
返回值1==Value2;
}
long diff=Math.Abs(longValue1-longValue2);

return diff怎么办?听起来很合理;这个人类/太空人至少暂时会这样做。我遗漏了一些明显的东西,但是
old
如何在分配
pic.Height
到哪里以及在哪里测试它是否与
pic.Height
相等?也就是说,这些相等测试不总是存在吗
true
?这一点很好;我从其他地方得到了这一代码;也许答案是平等测试更为挑剔;例如,分配可能会分配99.9999%的值,或100.0001%的值,而平等测试可能会检测到微小的差异。我在回答中链接到的页面实际上建议您不要使用我们e Double.Epsilon:由于Epsilon定义了一个范围接近零的正值的最小表达式,两个相似值之间的差值必须大于Epsilon。通常,它比Epsilon大很多倍。因此,我们建议在比较双值是否相等时不要使用Epsilon。什么关于?听起来很合理;这个人类/太空人至少暂时会这样做。我遗漏了一些明显的东西,但是
oldH
如何在分配
pic.Height
到哪里以及在哪里测试它是否与
pic.Height
相等?也就是说,这些相等测试不总是
正确的吗>?说得好;我从其他地方得到了这段代码;也许答案是等式测试更为挑剔;例如,赋值可能会指定99.9999%的值,或100.0001%的值,等式测试可能会检测到微小的差异。我在回答中链接的页面实际上建议您不要使用Double。ε:因为Epsilon定义了范围接近零的正值的最小表达式,所以两个相似值之间的差值必须大于Epsilon。通常,它比Epsilon大很多倍。因此,我们建议在比较两个值的相等性时不要使用Epsilon。这并不是一个真正的问题回答关于什么是合理公差的问题。图片/图像类型可以而且确实具有双重类型属性,即使宽度和高度也是如此。所有WPF控件都使用双重x、y、宽度和高度,这也包括图像类。它确实回答了这个问题,正如我写的那样,在这种情况下,合理公差为0,您不知道在这种情况下,由于它不是一个连续值,任何使用双属性的图像类型或控件在其内部实现中将其转换为int,没有半个像素那么薄,因为上面的代码是“内部实现”只需将属性保存为整数即可正常工作。这并不能真正回答合理公差是多少的问题。图片/图像类型可以而且确实具有双类型属性,即使宽度和高度也是如此。所有WPF控件都使用双x、y、宽度和高度,这也包括图像类。确实如此正如我所写的,在这种情况下,我们可以回答这个问题,也就是说,一个合理的公差
public static bool EqualInPercentRange(this double Value1, double Value2, long Units = 2) {
  long longValue1 = BitConverter.DoubleToInt64Bits(Value1);
  long longValue2 = BitConverter.DoubleToInt64Bits(Value2);
  //
  // If the signs are different, return false except for +0 and -0.
  //
  if ((longValue1 >> 63) != (longValue2 >> 63)) {
    //
    // ReSharper disable once CompareOfFloatsByEqualityOperator
    //
    return Value1 == Value2;
  }

  long diff = Math.Abs(longValue1 - longValue2);

  return diff <= Units;
}