前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C、C++ 和 Java 中的浮点运算和关联性

C、C++ 和 Java 中的浮点运算和关联性

作者头像
鲸落c
发布2022-11-14 16:41:19
4040
发布2022-11-14 16:41:19
举报
文章被收录于专栏:鲸落学习笔记鲸落学习笔记

theme: channing-cyan highlight: a11y-dark


「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

浮点运算是否遵循关联性?换句话说,对于表达式“(A + B) + C”和“A + (B + C)”,我们是否总是得到相同的结果?

人们可能期望浮点数遵循编程语言中的结合性规则,因为它们在数学上是结合的。然而,并非在所有情况下都是如此。

考虑下面的 C/C++ 程序。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    float A = -500000000;
    float B = 500000000;

    float C = 1;

    printf("A + (B + C) 等于 %f \n", A + (B + C));
    printf("(A + B) + C 等于 %f", (A + B) + C);

    return 0;
}

输出:

代码语言:javascript
复制
A + (B + C) 等于 0.000000 
(A + B) + C 等于 1.000000

从上面给出的输出中可以明显看出,浮点运算可能并非在所有情况下都遵循结合律。这是由于浮点数的存储和表示格式,它在计算过程中对数字进行四舍五入,因此,代数的关联定律不一定适用于浮点数。在这种情况下,

代码语言:javascript
复制
上述输出的解释:

A + (B + C):
(B + C) = 500000000.0 + 1.0
        = 500000000.0 
(在浮点运算过程中四舍五入)

A + (B + C) = -500000000.0 + 500000000.0 
            = 0.000000

(A + B) + C:
(A + B) = -500000000.0 + 500000000.0 
        = 0.000000

(A + B) + C = 0.000000 + 1 
            = 1.000000

Java呢?

我们在 Java 中得到相同的结果,因为 Java 也使用类似的浮点数表示。

代码语言:javascript
复制
import java.io.*;

class Main
{
    public static void main (String[] args)
    {
        float A = -500000000;
        float B = 500000000;

        float C = 1;

        System.out.println("A + (B + C) 等于 " +
                        (A + (B + C)));
        System.out.println("(A + B) + C 等于 " +
                        ((A + B) + C));
    }
}

输出:

代码语言:javascript
复制
A + (B + C) 等于 0.000000 
(A + B) + C 等于 1.000000

整数呢?

现在让我们在数据类型为整数时尝试相同的计算。这是一段代码供您观察:

代码语言:javascript
复制
#include<stdio.h>
#include<stdio.h>
int main()
{
int A = -500000000;
int B = 500000000;

int C = 1;

printf(" A + (B + C) 等于 %d \n", A + (B + C));
printf("(A + B) + C 等于 %d", (A + B) + C);

return 0;
}

输出:

代码语言:javascript
复制
 A + (B + C) 等于 1 
(A + B) + C 等于 1

如果你发现任何不正确的地方,或者想分享有关上述主题的更多信息,可以在评论区告诉我

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档