gpt4 book ai didi

c# - 避免 c# 编译器优化临时变量的 Noop 方法

转载 作者:行者123 更新时间:2023-11-30 15:23:43 24 4
gpt4 key购买 nike

在导数计算上下文中,我需要确保 x 和 x+h 相差一个可精确表示的数字,所以我这样做了:

var temp = x + deltaX;
DoNothing(temp);
deltaX = temp - x;

存在 DoNothing() 方法是为了防止 temp 被优化掉。

这是正确的处理方式吗?

最佳答案

您担心的编译器优化对于 .NET 无效。众所周知,它是在 C++ 中使用“快速数学”编译器设置完成的。 .NET 保证 IEEE 浮点行为,但允许超额精度(这里不是问题)。优化通常会改变值(value),因此被禁止。

如果你想清除我经常使用的值的编译器知识:

[MethodImplOptions(NoInlining)]
T F<T>(T x) { return x; }

这不能保证有效,但它适用于目前存在的所有 JIT。 .NET JIT 在优化方面非常薄弱,我怀疑它们是否会添加那种会使这个技巧失效的数据流分析。

关于c# - 避免 c# 编译器优化临时变量的 Noop 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34137516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com