我想看一段进行浮点除法的代码,当除法为零时返回无穷大。我在哪里可以找到它?
想要知道这一点的动机来自于来自的代码。NET文档。我本来希望得到一个DivideByZeroException,但我得到的是无穷大。
https://docs.microsoft.com/en-us/dotnet/api/system.dividebyzeroexception?view=netframework-4.8#remarks
using System;
public class Example
{
public static void Main()
{
int number1 = 3000;
int number2 = 0;
Console.WriteLine((double)number1 / number2);
}
}
// The example displays the following output:
// Infinity
我发现留档声明浮点除以零不会抛出异常,所以没关系:
https://docs.microsoft.com/en-us/dotnet/api/system.dividebyzeroexception?view=netframework-4.8#remarks
将浮点值除以零不会引发异常;根据IEEE 754算术规则,它会导致正无穷大、负无穷大或不是数字(NaN)。因为下面的示例使用浮点除法而不是整数除法,所以该操作不会引发DiVideByZeroException异常。
在Visual Studio中,我将鼠标悬停在“/”除法符号上,然后重新显示
double double.operator /(double left, double right)
现在,我想看看它的实现,看看如何返回无穷大。但我找不到它。
我在这里查过了
但看不到除法运算符。
上面的链接然后引导我到这里
但也没有关于实现细节的任何信息。
我也看了这里
但只能看到注释掉的代码
/// Double IArithmetic<Double>.Divide(Double divisor, out bool overflowed) {
/// Double s = m_value / divisor;
/// overflowed = IsInfinity(s) || IsNaN(s);
/// return s;
/// }
corefx的Double
实现中也没有任何内容:
我本以为会有这样的东西(伪代码):
public static double operator /(double left, double right)
{
if (right == 0)
{
return double.Infinity;
}
else
{
...
}
}
您的代码编译为以下CIL:
.method public hidebysig static void Main() cil managed
{
.entrypoint
// Code size 21 (0x15)
.maxstack 2
.locals init (int32 V_0,
int32 V_1)
IL_0000: nop
IL_0001: ldc.i4 0xbb8
IL_0006: stloc.0
IL_0007: ldc.i4.0
IL_0008: stloc.1
IL_0009: ldloc.0
IL_000a: conv.r8
IL_000b: ldloc.1
IL_000c: conv.r8
IL_000d: div
IL_000e: call void [mscorlib]System.Console::WriteLine(float64)
IL_0013: nop
IL_0014: ret
} // end of method Example::Main
该调用是正在进行的除法操作。这意味着CLR将执行该工作,因此您将找不到任何执行该工作的源代码。如果我们深入研究浮点值除法运算符的CLR源代码(这里显示的是coreclr):
TFp FpDiv(TFp dividend, TFp divisor)
{
#ifdef _TARGET_ARMARCH_
// From the ECMA standard:
//
// If [dividend] is zero and [divisor] is zero
// the result is NaN.
// If [dividend] is infinity and [divisor] is infinity
// the result is NaN.
if (dividend == 0 && divisor == 0)
{
return TFpTraits::NaN();
}
else if (!_finite(dividend) && !_isnan(dividend) && !_finite(divisor) && !_isnan(divisor))
{
return TFpTraits::NaN();
}
#endif // _TARGET_ARMARCH_
return dividend / divisor;
}
您可以看到它正在处理一些先决条件,然后调用编译器的内部操作。在x86上,这将依次是一个FDIV调用,它被记录为发出一个除以零的标志,由于IEEE 754,C运行时将变成无穷大。这个无穷大可以将它的工作方式备份到您的C#应用程序的链中。
我正在尝试设置一个 nodemcu 模块来收集来自温度传感器的数据,并使用 mqtt pubsubclient 将其发送到我的 mqtt 代理,但这不是问题所在。 我正在尝试以只有一个小数的格式发送温度,此时我已经成功地将其向上或向下舍入,但格式不正确。截至目前,它将温度四舍五入为24.50,27.80,23.10等。我想删除尾随的zereos,所以它变成24.5,27.8,23.1等。 到目前为
本文向大家介绍清除浮动的方法有哪些?相关面试题,主要包含被问及清除浮动的方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 方法一:使用带clear属性的空元素 在浮动元素后使用一个空元素如 ,并在CSS中赋予.clear{clear:both;}属性即可清理浮动。亦可使用 或 来进行清理。 方法二:使用CSS的overflow属性 给浮动元素的容器添加overflow:hidde
本文向大家介绍C#浮点,双精度,十进制,包括了C#浮点,双精度,十进制的使用技巧和注意事项,需要的朋友参考一下 示例 浮动 float是.NET数据类型的别名System.Single。它允许存储IEEE 754单精度浮点数。存在此数据类型mscorlib.dll,每个C#项目在创建它们时都会隐式引用该数据类型。 大致范围:-3.4×10 38至3.4×10 38 十进制精度:6-9个有效数字 记
本文向大家介绍C# 清除cookies的代码,包括了C# 清除cookies的代码的使用技巧和注意事项,需要的朋友参考一下 不同的浏览器会把cookie文件保存在不同的地方 以下是C# WebBrowser控件cookies的存放路径 C:\Users\{你的帐号名}\AppData\Local\Microsoft\Windows\INetCookies cookies文件格式请查看相
问题内容: 据所有文件(尤其是文本文件)末尾所知,有一个 用于EOF或NULL字符的十六进制代码。当我们要编写程序 并读取文本文件的内容时,我们将发送读取函数,直到 收到EOF十六进制代码。 我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我 看不到EOF(文件结尾/ NULL)或EOT(文本结尾)的任何十六进制代码 注意:我的输入文件是一个文本文件,其内容为“ “ EOF”的十六进制代
据我们所知,在所有文件的末尾,特别是文本文件中,有一个十六进制代码表示EOF或NULL字符。当我们想要编写程序并读取文本文件的内容时,我们发送read函数,直到收到EOF hexcode。 我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我看不到EOF(文件结尾/NULL)或EOT(文本结尾)的任何十六进制代码 ASCII/十六进制代码表: 这是十六进制查看器工具的输出: 注意:我的输入