广告
返回顶部
首页 > 资讯 > 数据库 >PostgreSQL浮点数是怎么实现的
  • 926
分享到

PostgreSQL浮点数是怎么实现的

2024-04-02 19:04:59 926人浏览 薄情痞子
摘要

这篇文章主要介绍“postgresql浮点数是怎么实现的”,在日常操作中,相信很多人在Postgresql浮点数是怎么实现的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Po

这篇文章主要介绍“postgresql浮点数是怎么实现的”,在日常操作中,相信很多人在Postgresql浮点数是怎么实现的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PostgreSQL浮点数是怎么实现的”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

众所周知,计算机是以二进制方式存储数据,而浮点数在序列化为二进制时可能会出现精度丢失(IEEE 754标准),对于数据库实现来说,会引入一个问题,那就是那么两个浮点数之间在比较时在数据库是如何实现的?
下面是用于测试脚本:

testdb=# select 123.31::double precision > 123.45::double precision;;

一、数据结构

浮点数的编码可参考维基百科,简单来说由三部分组成,包括符号位,有效数字和指数位.其中,在指数位全为1(二进制的1)时,如果有效数字不全为0,那么这个数不是一个数(以nan表示).

二、源码解读

浮点数(双精度)的比较实现函数是float8_cmp_internal,逻辑比较简单.
其中nan亦即上面介绍的”不是一个数nan”


int
float8_cmp_internal(float8 a, float8 b)
{
    
    if (isnan(a))
    {
        if (isnan(b))
            return 0;           
        else
            return 1;           
    }
    else if (isnan(b))
    {
        return -1;              
    }
    else
    {
        if (a > b)//a > b,返回1
            return 1;
        else if (a < b)//a < b,返回-1
            return -1;
        else
            return 0;//否则,返回0
    }
}

C语言中,浮点数不要比较相等或不等,但可以进行<,>,>=,<=运算.
但在SQL中,可以进行相等或不等运算,因为实质通过>, <进行比较的实现而不是浮点数的直接等值比较实现.

三、跟踪分析

测试脚本

testdb=# select 123.31::double precision > 123.45::double precision;

跟踪分析

(gdb) c
Continuing.
Breakpoint 1, float8_cmp_internal (a=123.31, b=123.45) at float.c:1056
1056        if (isnan(a))

查看内存中的数据(8个字节,以单字节b方式显示)

(gdb) x/8b &a
0x7ffcd2cac728: 0xa4    0x70    0x3D    0x0a    0xd7    0xd3    0x5e    0x40
(gdb) x/8b &b
0x7ffcd2cac720: 0xcd    0xcc    0xcc    0xcc    0xcc    0xdc    0x5e    0x40
(gdb)

同时,我们用c语言来打印123.31和123.45的二进制编码作为对照

[xdb@localhost source]$ cat double_test.c 
#include <stdio.h>
int main() {
    double d1 = 123.31;
    double d2 = 123.45; 
    printf("d1 : %llx \n", *((long *)&d1)); 
    printf("d2 : %llx \n", *((long *)&d2)); 
}
[xdb@localhost source]$ GCc double_test.c -o dt
[xdb@localhost source]$ ./dt 
d1 : 405ed3d70a3d70a4 
d2 : 405edccccccccccd

输出的值与在跟踪分析中的内存值一致.

到此,关于“PostgreSQL浮点数是怎么实现的”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL浮点数是怎么实现的

本文链接: https://www.lsjlt.com/news/63920.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PostgreSQL浮点数是怎么实现的
    这篇文章主要介绍“PostgreSQL浮点数是怎么实现的”,在日常操作中,相信很多人在PostgreSQL浮点数是怎么实现的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Po...
    99+
    2022-10-18
  • Python虚拟机中浮点数的实现原理是什么
    这篇文章主要介绍“Python虚拟机中浮点数的实现原理是什么”,在日常操作中,相信很多人在Python虚拟机中浮点数的实现原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python虚拟机中浮点数的实...
    99+
    2023-07-05
  • C语言怎么实现两个浮点数相乘
    本篇内容主要讲解“C语言怎么实现两个浮点数相乘”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现两个浮点数相乘”吧!输入两个浮点数,计算乘积。实例#include <stdio....
    99+
    2023-06-17
  • linux shell实现判断输入的数字是否为合理的浮点数
    这个shell是来判断输入的数字是否为合理的浮点数 实现代码如下: #!/bin/sh # validfloat -- Tests whether a number is a valid floati...
    99+
    2022-06-04
    数字 浮点数 linux
  • python中实现精确的浮点数运算详解
    为什么说浮点数缺乏精确性? 在开始本文之前,让我们先来谈谈浮点数为什么缺乏精确性的问题,其实这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾。 举个例子,假如说我只能使用整数(即只精...
    99+
    2022-06-04
    详解 精确 浮点数
  • javascript基于牛顿迭代法怎么实现求浮点数的平方根
    这篇文章主要介绍javascript基于牛顿迭代法怎么实现求浮点数的平方根,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先是牛顿迭代法原理:比如我们要求a的平方根,首先随便猜一个近...
    99+
    2022-10-19
  • linux 中怎么判断输入的数字是否为合理的浮点数
    linux 中怎么判断输入的数字是否为合理的浮点数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现代码如下:#!/bin/sh# validfloat -...
    99+
    2023-06-09
  • php将值转为浮点型的函数是什么
    本文小编为大家详细介绍“php将值转为浮点型的函数是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“php将值转为浮点型的函数是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php将值转为浮点型的函数有两...
    99+
    2023-07-02
  • C#语法浮点型字面量是怎么样的
    这篇文章主要介绍了C#语法浮点型字面量是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C#语法浮点型字面量小数是生活中经常使用的一种数据表示形式。我们日常使用的5.5...
    99+
    2023-06-04
  • PostgreSQL数据库实现原理是什么
    这篇文章主要讲解了“PostgreSQL数据库实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL数据库实现原理是什么”吧!Po...
    99+
    2022-10-18
  • PostgreSQL中函数StartTransaction的实现逻辑是什么
    这篇文章主要讲解了“PostgreSQL中函数StartTransaction的实现逻辑是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreS...
    99+
    2022-10-19
  • PostgreSQL中PostgresMain函数的实现逻辑是什么
    本篇内容主要讲解“PostgreSQL中PostgresMain函数的实现逻辑是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中Post...
    99+
    2022-10-19
  • PostgreSQL中exec_simple_query函数的实现逻辑是什么
    这篇文章主要介绍“PostgreSQL中exec_simple_query函数的实现逻辑是什么”,在日常操作中,相信很多人在PostgreSQL中exec_simple_query函数的实现逻辑是什么问题上...
    99+
    2022-10-19
  • PostgreSQL中ExecInsert函数的实现逻辑是什么
    这篇文章主要介绍“PostgreSQL中ExecInsert函数的实现逻辑是什么”,在日常操作中,相信很多人在PostgreSQL中ExecInsert函数的实现逻辑是什么问题上存在疑惑,小编查阅了各式资料...
    99+
    2022-10-19
  • PostgreSQL中ExecModifyTable函数的实现逻辑是什么
    这篇文章主要讲解了“PostgreSQL中ExecModifyTable函数的实现逻辑是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQ...
    99+
    2022-10-19
  • PostgreSQL中函数CommitTransaction的实现逻辑是什么
    这篇文章主要介绍“PostgreSQL中函数CommitTransaction的实现逻辑是什么”,在日常操作中,相信很多人在PostgreSQL中函数CommitTransaction的实现逻辑是什么问题上...
    99+
    2022-10-18
  • PostgreSQL中AutoVacLauncherMain函数的实现逻辑是什么
    本篇内容介绍了“PostgreSQL中AutoVacLauncherMain函数的实现逻辑是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况...
    99+
    2022-10-18
  • PostgreSQL中函数AssignTransactionId的实现逻辑是什么
    本篇内容介绍了“PostgreSQL中函数AssignTransactionId的实现逻辑是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况...
    99+
    2022-10-18
  • PostgreSQL聚合函数的实现方法是什么
    本篇内容介绍了“PostgreSQL聚合函数的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • Python tensorflow与pytorch的浮点运算数怎么计算
    这篇文章主要讲解了“Python tensorflow与pytorch的浮点运算数怎么计算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python tensorflow...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作