C 中的浮点运算是否具有结合律?

2024-06-18

加法在数学上具有结合律:

(a + b) + c = a + (b + c)

在一般情况下,此属性不适用于浮点数,因为它们表示有限精度的值。

作为优化的一部分,从 C 程序生成机器代码时,编译器是否允许进行上述替换? C标准中到底在哪里说的?


不允许编译器执行“优化”,这将导致计算出的值与根据抽象机器语义计算出的值不同。

5.1.2.3 程序执行

[#1] 本国际中的语义描述 标准描述了抽象机的行为 哪些优化问题是无关紧要的。

[#3] 在抽象机中,所有表达式都会被求值 正如语义所指定的。

[#13] 示例 5 浮点表达式的重新排列 由于精度的限制,经常受到限制 以及范围。该实施不能普遍适用 加法或加法的数学关联规则 乘法,也不是分配规则,因为 即使没有溢出和舍入误差 下溢。

在你的例子中:

(a + b) + c

甚至没有括号:

a + b + c

we have

   +
  / \
  +  c
 / \
 a  b

并且编译器需要生成代码,就像a总结为b结果总结为c.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的浮点运算是否具有结合律? 的相关文章

  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 如何反转音量滑块的音量数学?

    我正在构建一个视频播放器 但有点卡在音量滑块部分 这是一个 YouTube 风格的垂直滑块 这意味着如果滑块位于顶部位置 音量应该为 100 如果滑块拖动到底部位置 声音应该为 0 目前它的做法与我想要的相反 向下拖动滑块将使声音变大 向上
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • Python 中的十进制到二进制半精度 IEEE 754

    我只能使用以下命令将十进制转换为二进制单精度 IEEE754struct pack模块 或者使用相反的方法 float16 或 float32 numpy frombuffer 是否可以使用 Numpy 将十进制转换为二进制半精度浮点数 我
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • PHP 除法浮点值问题

    当我尝试获取余数时 它给出了无效值 我试图获得两位小数的余数 我得到 3 4694469519536E 18 我的价值观是 x 0 1 y 0 005 我尝试了以下方法 echo ed fmod 0 1 0 005 OutPut 3 469
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • 有没有一个 PHP 函数可以交换两个变量的值?

    比如说我有 var1 ABC var2 123 在某些条件下我想像这样交换两者 var1 123 var2 ABC 是否有一个 PHP 函数可以执行此操作 而不必创建第三个变量来保存其中一个值 然后重新定义每个值 就像这样 var3 var
  • 在perl中调用基本构造函数

    从 Perl 中的类构造函数调用基本构造函数的正确方法是什么 我见过这样的语法 my class shift my a shift my b shift my self class gt SUPER new a b return self
  • Chart js:更新具有两个数据集的折线图

    我想用两个数据集更新图表js中的折线图 我以某种方式设法清空图表 然后能够填充其中一个数据集 但无法使两个数据集都工作 这是代码 ajaxRequest url reports updateChart filter true method
  • Vb中读取USB存储设备的序列号

    是否可以使用VB读取USB驱动器的序列号 这将为您提供 net 中驱动器的信息 包括 USB 设备 只需导入这些 导入脚本 导入系统 IO Private Class USBsn Private Sub Button1 Click ByVa
  • zsh:命令替换和正确引用

    我有一个脚本P它接受文件名作为参数 P file1 file2 file3 我也有一个脚本G它生成一个 通常是短列表 文件名 每行一个文件名 在我想写的主脚本中zsh 我想用G生成要处理的文件名P 天真的尝试是这样的 P G 这几乎很有效
  • 从 SQLCMD 执行 CREATE VIEW 和 ALTER VIEW

    我正在尝试使用 sql cmd 执行包含以下内容的 sql 文件 sqlcmd S localhost dbInstance i Sample sql v filepath C Sql 示例 sql内容 根据手册 CREATE VIEW 必
  • 如何实现从调用者动态创建对象和类的零参数构造函数基类?

    我有 4 个类 它们都实现了非常相似的代码块 唯一的区别是每个人都需要实例化一个单独的Object and Myclass 在运行时 下面Action类是一个简化版本 实际代码要长得多 通常我会传入参数来根据调用者提供的内容创建对象和类 然
  • 浮点运算的最佳实践

    我正在对精确到小数点后第二位的小数输入执行加法和减法 我试图通过乘以 100 将它们转换为整数来提高准确性 但效果却相反 考虑以下代码和输出 double d 2 01 int a int d 100 0 cout lt lt a lt l
  • GridView 模板列有条件设置为只读

    有没有办法将 GridView 上的模板列从代码隐藏设置为只读 就像如果测试Admin true make readonly false else readonly true 我发现穆罕默德 阿赫塔尔的答案几乎是正确的 只是我需要在我的案例
  • jquery ui 选项卡内的 Openlayers

    我想在 jquery ui 选项卡中使用 Openlayers 但出现错误 大小为空 有同样的问题 解释于jquery 选项卡 http docs jquery com UI Tabs my slider 2C Google Map 2C
  • Swagger/OpenAPI 注释 V3 - 在 swagger 注释中使用 Enum 值

    我正在使用 Swagger OpenApi V3 注释创建应用程序的 API 描述 从以下依赖项导入
  • Spring @RequestParam 和控制器接口

    我对以下行为感到困惑 RequestParam value someValue 在里面docs https docs spring io spring docs current javadoc api org springframework
  • 使用设备函数指针数组

    我需要以下设备版本 主机代码 double func double x double func1 double x return x 1 double func2 double x return x 2 double func3 doubl
  • AngularUI 可排序不适用于多个应用程序

    我创建了带有可排序列表的 angularjs 应用程序 我的应用程序可以与其他不同的应用程序一起多次包含在页面中 每个角度应用程序都是独立的用户控制 var myapp angular module myapp ui myapp contr
  • 用纯JS检查元素是否有背景图片?

    检查特定元素是否具有的正确方法是什么background image与它相关联 在纯Javascript中 现在我有这个 var elementComputedStyle window getComputedStyle element va
  • fetch().then() 返回内容类型和正文[重复]

    这个问题在这里已经有答案了 互联网上的每个 fetch API 示例都展示了如何使用 response json response blob 等仅返回正文 我需要的是调用一个将内容类型和主体都作为 blob 的函数 但我不知道该怎么做 fe
  • 该操作对于事务状态无效

    我有一个TransactionScope 堵塞 它总是卡在插入语句中 它在活动监视器中显示为阻塞任务 因此它阻塞 SQL 服务器 并且在超时后 我收到此错误 该操作对于事务的状态无效 出了什么问题 const TransactionScop
  • GPU 上的张量流:尽管 cuda 的 deviceQuery 返回“PASS”结果,但没有已知设备

    注 这个问题最初是在github上问的 https github com tensorflow tensorflow issues 7648 issuecomment 280866214 但被要求改为在这里 我在 GPU 上运行 Tenso
  • 如何让最后一个字母闪烁?

    我最近创建了这个程序来显示字符串的最后一个字母 使用此代码 include
  • C 中的浮点运算是否具有结合律?

    加法在数学上具有结合律 a b c a b c 在一般情况下 此属性不适用于浮点数 因为它们表示有限精度的值 作为优化的一部分 从 C 程序生成机器代码时 编译器是否允许进行上述替换 C标准中到底在哪里说的 不允许编译器执行 优化 这将导致