gpt4 book ai didi

c# - 浮点计算精度

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:30 24 4
gpt4 key购买 nike

我在 C# 中遇到了 float 计算精度问题,这里是最小的工作示例:

int num = 160;
float test = 1.3f;

float result = num * test;
int result_1 = (int)result;
int result_2 = (int)(num * test);
int result_3 = (int)(float)(num * test);

Console.WriteLine("{0} {1} {2} {3}", result, result_1, result_2, result_3);

上面的代码会输出“208 208 207 208”,有人能解释一下 result_2 的奇怪值,它应该是 208 吗?(二进制不能精确表示1.3,会造成浮点精度问题,不过我很好奇细节)

最佳答案

num * test 可能会给你一个类似 207.9999998... 的结果,当你将这个 float 值转换为 int 你得到 207,因为转换为 int 会将结果四舍五入到最接近的整数,在这种情况下 207(类似于 Math.Floor()).

如果您将 num * test 分配给浮点类型,如 float result = num * test;207.9999998... 将是四舍五入到最接近的浮点值 witch 是 208

让我们总结一下:

float result = num * test; 给出 208,因为您将 num * test 分配给 float 类型。

int result_1 = (int)result; 给你 208 因为你将 result 的值转换为 int -> (int)208 .

int result_2 = (int)(num * test); 给你 207 因为你正在将类似 207.9999998... 的内容转换为 int -> (int)207.9999998....

int result_3 = (int)(float)(num * test); 给你 208 因为你首先将 207.9999998...诠释。

关于c# - 浮点计算精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49527362/

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