为此值转换行为改变了.NET 8和.NET 9?

问题描述 投票:0回答:1
if ((int)MathF.Floor(float.PositiveInfinity) > 0) Console.WriteLine("This is .NET 9.0"); else Console.WriteLine("This is .NET 8.0");

使用这些项目文件中的任何一个:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
</Project>

or
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
</Project>

在我的计算机中,该程序将正确识别您使用的项目文件,无论您是在调试还是发布模式下进行编译。
vs 2022(17.13.3)中的手表窗口报告说,不管是哪个运行时,但尽管如此,但是,将
(int)MathF.Floor(float.PositiveInfinity)

分支在.NET9.

NET上。

在Ildasm中将两个发行dll降低没有有意义的差异。

-2147483648
为8.0.14或9.0.3.
	

我认为这与this Change

有关,其中所有浮点之间的转换现在都在X86/X64机器上具有饱和的行为。实施

> 0

.

可能使用了这样的转换。
在更改之前,只要值超出

Environment.Version
c# .net-core
1个回答
1
投票
MathF.Floor

的结果将始终为int。更改后,当值大于

int.MinValue
时,结果将为

int

,当值小于

int.MaxValue
int.MaxValue
时。
发生这种变化的原因是
进行此更改是为了标准化所有浮动的点对点转换以具有饱和的行为并使行为确定性。
cass:我实际上无法在Apple M4 MacBook上复制您的代码中的行为。
    
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.