cmath

文章目录

  • 一、FLOOR简介
  • 二、算法
    • 1.标量源码
    • 代码解读(大致实现原理):
      • 向量化

一、FLOOR简介

floor函数,其功能是“向下取整”,或者说“向下舍入”、“向零取舍”,即取不大于x的最大整数,与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值。

二、算法

1.标量源码

#include "math.h"
#include "math_private.h"
static const float huge = 1.0e30;
float
floorf(float x)
{int32_t i0,j0;u_int32_t i;GET_FLOAT_WORD(i0,x);j0 = ((i0>>23)&0xff)-0x7f;if(j0<23) {if(j0<0) {  /* raise inexact if x != 0 */if(huge+x>(float)0.0) {/* return 0*sign(x) if |x|<1 */if(i0>=0) {i0=0;}else if((i0&0x7fffffff)!=0){ i0=0xbf800000;}}} else {i = (0x007fffff)>>j0;if((i0&i)==0) return x; /* x is integral */if(huge+x>(float)0.0) { /* raise inexact flag */if(i0<0) i0 += (0x00800000)>>j0;i0 &= (~i);}}} else {if(j0==0x80) return x+x;    /* inf or NaN */else return x;              /* x is integral */}SET_FLOAT_WORD(x,i0);return x;
}

代码解读(大致实现原理):

首先我们需要对传入的浮点数x做一个取阶码exp运算,这里需要了解IEEE754浮点数标准,即第一位符号位,接8位指数位,接23位尾数位,那么取阶码就是右移23位后,和0xff做一个&运算,再减掉偏置值就可以得到真值j0了。
然后对真值进行范围判断,先看最简单的两种情况,x在(0,1)区间内都返回0;在(-1,0)区间内返回-1。此时j0 是小于0的。
然后在j0在(0,23)内时,做一个对0x007fffff右移j0位的运算,这里之前我不太明白,发现这个数字是符号位和指数位全为0,尾数位全为1。如果x是整数(integer),那么0x007fffff右移j0位后,再与x的浮点数形式做&运算,结果必然是0(这里要知道前面符号位和指数位肯定是0,因为你和0做的&),那也就是说尾数位全0,为什么?因为整数啊,如果移完后尾数不为0那么结果肯定就不为0,那说明小数点后有非零数存在那就不是整数了。
在x<0时,x先加一下对0x00800000右移j0位后的结果,再与~i(就是尾数全0,符号位和指数位全1)做&运算。这个自己可以举个例子就搞明白了,比如-1.5,即为1011 1111 1100 0000 0000……
加完后得到1100 0000 0100 0000 0000…… 再和~i做个&运算,得到1100 0000 0100 0000……就是-2,没问题。
NAN和INF比较容易看出,真值为128那说明指数位全1了,返回x本身就行。

向量化

【FLOOR函数的标量实现】相关推荐

  1. [20180602]函数与标量子查询3.txt

    [20180602]函数与标量子查询3.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  2. sql server表值函数与标量值函数实际应用

    sql中的表值函数与标量值函数区别与用法 一 .表值函数又分为内联函数与多语句函数 (1)内联函数就是没有函数主体表是单个 SELECT. 下面是一个不带输入参数的表值函数 create functi ...

  3. Sass函数-数字函数-floor()函数

    floor() 函数刚好与 ceil() 函数功能相反,其主要将一个数去除其小数部分,并且不做任何的进位.也就是只做舍,不做入的计算: >> floor(2.1) 2 >> f ...

  4. 20180601]函数与标量子查询2.txt

    [20180601]函数与标量子查询2.txt --//昨天看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查询 ...

  5. [20180626]函数与标量子查询14.txt

    [20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...

  6. mysql中floor函数的作用是什么?

    需求描述: 最近写mysql程序的时候,使用了floor函数,在此记录下该函数的作用 操作过程: 1.使用floor函数的测试 mysql> select floor(1.23),floor(- ...

  7. matlab2c使用c++实现matlab函数系列教程-floor函数

    全栈工程师开发手册 (作者:栾鹏) matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 matlab2c调用方法: 1.下载动态链接库 2. ...

  8. c++ floor 赋值_C++之floor函数

    今天在清华大学出版社出版的<c++程序设计基础教程>中,看到一个简单的小程序.它是一个关于银行账户管理的小程序.先不急看代码,首先需要弄清银行是如何结算利息的.如果给定的条件是按照年利率的 ...

  9. python中floor的用法_Python floor() 函数 - Python 教程 - 自强学堂

    Python floor() 函数 描述 floor() 返回数字的下舍整数. 语法 以下是 floor() 方法的语法:import math math.floor( x ) 注意:floor()是 ...

最新文章

  1. mysql第三章关系模型_一个MySQL关系模型只有三个关系(二维表)组成。_学小易找答案...
  2. “智慧血联网平台”亮相军民融合技术装备博览会
  3. 视觉SLAM如何基于深度学习闭环检测?
  4. 99%高精度、毫秒级延迟,AI便携式神经假肢让截肢14年患者运动自如
  5. BCH区块链上启动新应用程序Chainfeed
  6. Python标准库01 正则表达式 (re包)
  7. 图解net use 命令使用示例
  8. ajax 微信code获取_获取链接的参数,判断是否是微信打开,ajax获取数据
  9. java反射回调函数_java回调函数
  10. 在线2-36进制转文本工具
  11. 数据挖掘第三版课后习题
  12. 一元线性回归(R语言)
  13. 如何压缩tiff图片?tif图片太大了怎么压缩?
  14. php7.4 ffi,PHP7.4中FFI的介绍(代码示例)
  15. 【迁移学习】STL(Stratified Transfer Learning)小结
  16. Jenkins未授权访问
  17. Cisco Packet Tracer 网络系统工程实训大作业【附网络拓扑图】
  18. jmeter--参数化--详解
  19. 问题 G: 流连人间的苏苏
  20. 单片机c语言中tbb,STM32学习之路入门篇之指令集及cortex——m3的存储系统

热门文章

  1. 是消极悲观,还是乐观进取
  2. Linux 越来越受欢迎的7个诱惑
  3. INCA 安装及使用教程
  4. access团员人数公式_计算机二级Access操作试题
  5. 关于监控网页白屏时间所遇到的问题
  6. 中国科大6G滤波器研发取得重大突破;机器人守门员挡住梅西点球
  7. 升级openssh (亲测)
  8. php提交飞信,用PHP模拟登录WAP飞信实现飞信发送
  9. 【windows脚本】开启启动注册表位置
  10. 应用程序无法正常启动(0xc0000142)。请单击‘确认’关闭应用程序