gpt4 book ai didi

c# - 获取下一个最小的 Double 数

转载 作者:IT王子 更新时间:2023-10-29 04:27:48 25 4
gpt4 key购买 nike

作为单元测试的一部分,我需要测试一些边界条件。一种方法接受 System.Double 参数。

有没有办法获得次小 double 值? (即将尾数减 1 个单位值)?

我考虑过使用 Double.Epsilon 但这是不可靠的,因为它只是从零开始的最小增量,因此不适用于较大的值(即 9999999999 - Double.Epsilon == 9999999999).

那么需要什么样的算法或代码才能:

NextSmallest(Double d) < d

...总是正确的。

最佳答案

如果您的数字是有限的,您可以在 BitConverter 类中使用几个方便的方法:

long bits = BitConverter.DoubleToInt64Bits(value);
if (value > 0)
return BitConverter.Int64BitsToDouble(bits - 1);
else if (value < 0)
return BitConverter.Int64BitsToDouble(bits + 1);
else
return -double.Epsilon;

IEEE-754 格式的设计使得构成指数和尾数的位一起形成一个与 float 具有相同顺序的整数。因此,要获得最大的较小数,如果值为正,则可以从该数中减一,如果值为负,则可以加一。

之所以有效,关键原因是未存储尾数的前导位。如果您的尾数全为零,那么您的数字就是 2 的幂。如果你从指数/尾数组合中减去 1,你得到所有的,你将不得不从指数位借用。换句话说:您必须减少指数,这正是我们想要的。

关于c# - 获取下一个最小的 Double 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15330644/

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