浮点和定点_定点和浮点:不能同时进行的两件事

浮点和定点

软件开发最具挑战性的方面之一是处理浮点数。 戴维·戈德伯格 ( David Goldberg )在1991年的《 计算机调查》论文中,每位计算机科学家都应了解的有关浮点算法的知识是有关该主题的公认经典著作。 本文不仅深入探讨了如何在大多数编程语言和计算机系统中实现浮点运算,而且还通过其长度和详细程度,为该主题的细微差别和困难提供了证据。 在JavaWorld的Floating-point Arithmetic , IBM DeveloperWorks的Java的新数学,第2部分:浮点数和Java理论等资料中充分记录了处理Java中浮点数的细微差别以及克服这些挑战的策略。 与实践:您的观点是什么, Dobb博士的 Java浮点数(Im)精度和固定,浮点和精确计算,以及Java的Bigdecimal , Java Glossary的浮点数 , Java教程的原始数据类型和NUM04-J。 如果需要精确计算,请不要使用浮点数 。

Java中遇到和讨论的大多数与浮点表示和算术有关的问题都是由于无法用基础的二进制 ( 基数为2 )表示形式来精确表示(通常) 十进制 ( 基数为十 )浮点数。 在本文中,我着重讨论将定点数(存储在数据库中)与浮点数 (以Java表示)混合可能导致的类似结果。

Oracle数据库允许使用两个表示“精度”和“小数位数 ”的整数来表示NUMBER数据类型的数字列 。 PostgreSQL的数字数据类型实现非常相似。 Oracle的和PostgreSQL允许相同的数据类型本质上表示整数值(指定了精度但未指定小数位数),定点数(指定了精度和小数位数)或浮点数点数(既未指定精度也未指定比例)。 这篇文章中基于Java / JDBC的简单示例将对此进行演示。

对于本文中的示例,将创建一个简单的表,该表在Oracle中名为 ,在PostgreSQL中为 。 接下来显示用于在两个数据库中定义这些简单表的DDL语句。

使用在Oracle数据库和PostgreSQL数据库中创建的表,接下来,我将使用简单的JDBC PreparedStatement将java.lang.Math.PI的值插入到所有三列的每个表中。 以下Java代码段演示了此插入。

将插入列

查询列

接下来的两个屏幕快照显示了分别针对Oracle和PostgreSQL数据库运行上述Java插入和查询代码的输出。

将与Oracle的列进行比较

20161103-Oracle双打

将与PostgreSQL列进行比较

20161103-postgresql-双打

使用Java,Oracle和PostgreSQL简单示例演示了在Oracle 和PostgreSQL 列类型上指定精度和小数 时可能出现的问题。 尽管在某些情况下需要定点数字 ,但重要的是要认识到Java没有定点原始数据类型, 而是使用BigDecimal或定点Java库 (例如decimal4j或Java Math定点库 )。适当处理从数据库列中检索到的定点数,这些定点数表示为定点。 在本文演示的示例中,没有什么是真正的“错误”,但是重要的是要认识到数据库中的定点数与Java中的浮点数之间的区别,因为将两者结合在一起的算法可能不会产生结果人们会期望的。

在Java和其他编程语言中,不仅需要关注算术运算的影响和可用精度对浮点数的“正确性”的影响。 开发人员还需要知道这些数字是如何存储在Oracle和PostgreSQL数据库的关系数据库列中的,以了解这些列上的精度和小数位数指示如何影响所存储的浮点数的表示形式。 如果将从数据库查询的表示形式用于浮点计算,则尤其适用。 这是(许多)另外一个示例,对于Java开发人员而言,理解所使用的数据库模式非常重要。

翻译自: https://www.javacodegeeks.com/2016/11/fixed-point-floating-point-two-things-dont-go-well-together.html

浮点和定点

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作91472 人正在系统学习中 相关资源:漂浮截图工具-教育工具类资源

来源:danpu0978

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月19日
下一篇 2020年4月19日

相关推荐