极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14363|回复: 4

map函数的代用

[复制链接]
发表于 2017-6-20 17:28:04 | 显示全部楼层 |阅读模式
在编程中需要用到map函数功能,发现这个函数仅支持long 数据类型,不支持float 数据类型。其函数说明如下:
“map(x,in_min,in_max,out_min,out_max) 函数的作用是将【,in_min,in_max】范围内的x等比映射到【out_min,out_max】范围内,函数返回值为long型。”
琢磨了一下,只要采用赋值语句“x=ax+b”即可实现上述map函数功能,且可以支持所有数据类型(只要在数据说明时定义好数据类型)。
其中a=(out_max-out_min)/(in_max-in_min) ;  b=out_min-in_min。
我就用这样简单的一句赋值语句很好的解决了变量数值范围的映射功能,不明白ardiono开发者设置map函数的原始用意,是否还有更加高深的作用?期盼高人指点。
回复

使用道具 举报

发表于 2017-6-20 19:11:05 | 显示全部楼层
  1. void setup() {

  2. }
  3. float a, b, c, d;

  4. void loop() {
  5.   float e;
  6.   e = map(e, a, b, c, d);
  7. }
复制代码

像我的这段代码,在Arduino里面可以编译通过啊,不明白你说的不支持float类型是什么意思
回复 支持 反对

使用道具 举报

发表于 2017-6-20 21:20:37 | 显示全部楼层
map函数只支持整数型
回复 支持 反对

使用道具 举报

发表于 2017-6-21 18:24:31 | 显示全部楼层
duanliangcong 发表于 2017-6-20 21:20
map函数只支持整数型

下面是原型肯定不支持float,定义float也会转成long
你自己改下定义不就可以了,arduino就是为了方便,这个函数并没有啥意思,就是给一般人用的
  long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
回复 支持 反对

使用道具 举报

发表于 2017-6-22 10:28:34 | 显示全部楼层
你可能忘记了一件很重要的事: Arduino 只是单片机, 并非电脑

在单片机中, 很多情况下是针对I/O 输出的, 而I/O的输出是以 二进计算, 数值都只有整数的.
在实际情况下, 大部份类似运算都是整数的.  真心看不出有什麽原因, 要特别支援浮点.
浮点的运算, 需要用较大的资源, 基於单片机的有限资源, 在不必要的情况下, 以整数为主是绝对正确的.

如果你有需要用到浮点, 自己做一个简单的 function 也很容易吧.
很多东西都是容易做的, 但没必要全部都放进基础的库上.
要看看实际的需要吧.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 15:51 , Processed in 0.038381 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表