che*_*ica 6 floating-point excel ieee-754
以下表达式false在C#中求值:
(1 + 1 + 0.85) / 3 <= 0.95
Run Code Online (Sandbox Code Playgroud)
我认为它在大多数实现IEEE 754的其他编程语言中也是如此,因为(1 + 1 + 0.85) / 3评估0.95000000000000007结果大于0.95.
但是,即使Excel也应该实现大部分IEEE 754,以下在Excel 2013中评估为TRUE:
= ((1 + 1 + 0.85) / 3 <= 0.95)
Run Code Online (Sandbox Code Playgroud)
这有什么具体原因吗?上面链接的文章没有提到任何可能导致此行为的Excel自定义实现.你能告诉Excel严格按照IEEE 754进行舍入吗?
请注意,即使大多数Excel问题都应该在superuser.com上提出,但这个问题涉及浮点运算,这是编程语言中的常见问题.从这个问题的主题来看,Excel是一种编程语言,如C#或Java.
您链接到的文章明确说明了使用接近 0 的值执行一些非标准操作:
值达到零时的示例 1. 在 Excel 95 或更早版本中,在新工作簿中输入以下内容: A1: =1.333+1.225-1.333-1.225
2.右键单击单元格 A1,然后单击“设置单元格格式”。在“数字”选项卡上,单击“类别”下的“科学”。将小数位设置为 15。Excel 95 不显示 0,而是显示 -2.22044604925031E-16。
然而,Excel 97 引入了一项优化来尝试纠正此问题。如果加法或减法运算的结果为零或非常接近零,Excel 97 及更高版本将补偿由于操作数与二进制之间的转换而引入的任何错误。
未指定的“尝试纠正此问题的优化”确实意味着,当需要与 IEEE 754 严格一致时,在使用 Excel 进行数值计算时应谨慎。也许使用 VBA(不太可能有这种“优化”?)可能是一种解决方法。
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |