首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Ctype返回浮点数时遇到困难

从Ctype返回浮点数时遇到困难
EN

Stack Overflow用户
提问于 2020-03-21 13:56:46
回答 1查看 501关注 0票数 0

我目前正在尝试为一些C++代码编写一个简单的包装器,这样我就能够传入一些信号数据,对其进行图形处理器操作,然后将其发送回来。目前,我已经删除了所有GPU元素,因为我无法让ctype返回除整数以外的任何内容。

我应该在下面的前言中说,我不确定这个决定的严重性,但我只能通过将C++函数包装在C函数中来使ctype识别C++函数。随着我尝试返回浮点数的不幸经历的继续,我已经意识到无论错误的来源是什么,都可以明确地区分来自C++的数字和来自C的数字之间的区别。我稍后会回到这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extern "C" float* giveLotsZeroes(int length) {
    float* list2 = (float*)malloc(sizeof(float)*length);
    for (unsigned int i = 0; i < length; i++) list2[i] = 0;
    return list2;
}

这是我在"kernal.cu“文件中用来测试返回浮点数的功能的示例C++函数之一。它被传递给C,在"chead.h“中定义了extern float* giveLotsZeroes(int length);__declspec(dllexport) float* giveLotsOfZeroes(int length); (注意函数名中间的,以区分它们)。最后,float* giveLotsOfZeroes(int length) { return giveLotsZeroes(length); }是在包括chead.h的Source.c中定义的,链接器似乎可以将其编译成多线程dll。我有一个类似的迭代,它以整数的形式返回一个0列表,它的功能非常好,以至于我在GPU错误处理中实现了它,并且由于GPU代码的每一行似乎都会导致错误,我有理由相信错误处理实现工作得很好,但我稍后会介绍一个异常。

在尝试返回长度为128的整数列表时,我使用numpy的ctypeslib库非常成功,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
accelerator.getLastErrorCode.restype = np.ctypeslib.ndpointer(dtype=ctypes.c_int,shape=(128,))
accelerator.getLastLineExecuted.restype = np.ctypeslib.ndpointer(dtype=ctypes.c_int,shape=(128,))

但是,如果我用长度变量" length“替换128,用ctypes.c_float替换ctypes.c_int,python通常会返回一个介于1e8和1e10之间的整数。对于如此奇怪的结果,我也尝试了返回单个浮点数,这也产生了类似的结果,尽管人们可能会认为单值函数也返回单个值,而不是那么惊人。有趣的是,当我使用定义restypes的np.ctypeslib.ndpointer方法时,python type函数仍然声称结果是一个numpy.ndarray,但是如果你把它当作一个restypes来处理,就会报错。我曾尝试将此函数的restypes或函数的变体定义为ctypes.c_float*lengthctypes.POINTER(ctypes.c_float*length),但都没有成功。

事实上,我做了两个返回单个零的函数,一个从C++返回到C再返回到python,另一个直接从C返回,并让这两个函数将它们的零打印到控制台以确认C没有问题,也没有C++的0有问题,但是当它们到达python时,C的0变成了1(我后来发现无论C试图返回什么都是这种情况),C++的0变成了一致的164。一位朋友建议将每个0实例更改为0.0f,这会将164更改为标准随机大数。

我在错误处理方面遇到的唯一问题是,在一个奇特但可重复的奇怪实例中,700设法从一个应该只能返回0到29之间的数字的函数中出来。不确定这可能与其他错误有什么联系,但如果它有帮助,它就会有帮助。

我已经将我的代码包含在下面的pastebin中,但请注意,python代码的大部分只是测试什么能按预期工作,什么不能工作。

https://pastebin.com/j7gfiKA6

EN

回答 1

Stack Overflow用户

发布于 2020-03-24 20:55:50

返回值为ctypes.POINTER(ctypes.c_float)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from ctypes import *
>>> dll = CDLL('test')
>>> dll.giveLotsZeroes.argtypes = c_int,
>>> dll.giveLotsZeroes.restype = POINTER(c_float)
>>> x = dll.giveLotsZeroes(100)
>>> x
<__main__.LP_c_float object at 0x0000022DE407F948>
>>> x[0]
0.0
>>> x[99]
0.0

您还可以使用以下命令获取整个数组的边界检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a = cast(x,POINTER(c_float*100)).contents
>>> a
<__main__.c_float_Array_100 object at 0x0000022DE45A5CC8>
>>> a[0]
0.0
>>> a[99]
0.0
>>> a[100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index

转换为Python列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> list(a)
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60788664

复制
相关文章
ctype.h
摘自维基百科 http://zh.wikipedia.org/wiki/Ctype.h
用户7886150
2021/02/25
8320
python ctype模块 (一)
官网:https://docs.python.org/2.6/library/ctypes.html?highlight=ctype#module-ctypes ctypes 的简单使用。 ctyp
py3study
2020/01/08
8370
python 与 C 的交互(ctype
对指针实例赋值只会改变其指向的内存地址,而不是改变内存的内容。指针实例有一个contents属性,返回这个指针所指向的对象。
py3study
2020/01/07
1.7K0
python 与 C 的交互(ctype
malloc(0)时程序会返回什么?
这个问题看起来十分刁钻,不过稍有常识的人都知道,制定 C 标准的那帮语言律师也不是吃白饭的,对这种奇奇怪怪的问题一定会有定义。翻阅C17 标准 草案 N2176,在 7.22.3 节里,有如下说法:
嵌入式与Linux那些事
2021/10/14
1.6K0
DTO返回JSON时,不展示某字段;DTO返回JSON时,更改某展示字段的key
//DTO返回JSON时,不展示某字段 @JsonIgnore private String addresses; //DTO返回JSON时,更改某展示字段的key @JsonProperty(value = "addresses") public final CalendarVideoAddressDTO getAddressesJSON() { if (addresses != null) { return JSONObject.pars
qubianzhong
2019/04/22
2.3K0
C库函数手册(ctype.h)
ctype.h函数说明: int isalpha(int ch)  若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0 int isdigit(int ch)  若ch是数字('0'-'9')返回非0值,否则返回0 int isalnum(int ch)  若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')返回非0值,否则返回0 int islower(int ch)  若ch是小写字母('a'-'z')返回非0值,否则返回0 int isupper(int ch) 
用户1215536
2018/02/05
7870
模型部署遇到困难?不慌,这样解决!
欢迎继续阅读模型部署入门系列教程!上期教程中,我们部署了一个简单的超分辨率模型,一切都十分顺利。但是,上一个模型还有一些缺陷——图片的放大倍数固定是 4,我们无法让图片放大任意的倍数。现在,我们来尝试部署一个支持动态放大倍数的模型,体验一下在模型部署中可能会碰到的困难。
OpenMMLab 官方账号
2022/04/08
8660
模型部署遇到困难?不慌,这样解决!
不使用正则进行英文数字等相关字符的规则校验
在一些场景中,比如说注册登录的时候,我们会对用户名做一些限制,比如只能是数字和字母的组合。一般情况下,我们会使用正则表达式来完成这样的功能,不过,PHP其实已经帮我们准备发了几个函数来处理这样的情况。
硬核项目经理
2020/05/13
8310
Golang 函数返回类型是接口时返回对象的指针还是值
Interface 是一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。
恋喵大鲤鱼
2019/06/14
8.1K0
ajax返回JSON时的处理方式
JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:”123”},对象的值是键值对的形式(key:value)。
全栈程序员站长
2022/07/08
2.4K0
C语言函数执行成功时,返回1和返回0,究竟哪个好?
基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的输入,常常产生不同的输出结果。
诸葛青云
2019/10/29
2.8K0
C语言函数执行成功时,返回1和返回0,究竟哪个好?
【建议收藏】这些PHP考点知识你是否还记得?
目录处理 chdir — 改变目录 chroot — 改变根目录 closedir — 关闭目录句柄 dir — 返回一个 Directory 类实例 getcwd — 取得当前工作目录 opendir — 打开目录句柄 readdir — 从目录句柄中读取条目 rewinddir — 倒回目录句柄 scandir — 列出指定路径中的文件和目录 数学 abs — 绝对值 acos — 反余弦 acosh — 反双曲余弦 asin — 反正弦 asinh — 反双曲正弦 atan
码农编程进阶笔记
2022/04/08
1.1K0
浮点数
因为浮点数加法首先需要将指数较小的数的指数调整到指数较大的数,然后再将尾数相加。因此这里当把 的指数调整到 的指数大小时,由于尾数精度只有 位,因此尾数精度不够导致 最后丢失。
hotarugali
2022/03/17
5.8K0
浮点数
浮点数
对应于C语言中的float,其中包含一位符号位S,8位指数位E和23位尾数位M,尽管M有23位,但他表示小数点之后的二进制小数,例如M为0110,其实是0.0110,这时因为标准规定小数点左边还有一个隐含位.(此处有一个点.),从而尾数值可能是0.0110,也可能是1.0110。E关系到规格化和非规格化。
根究FPGA
2020/06/30
2.1K0
浮点数
mybatis返回值为map类型时怎么处理_构造函数不能有返回类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
1.8K0
mybatis返回值为map类型时怎么处理_构造函数不能有返回类型
MyBatis在insert插入对象时,返回自增主键
useGeneratedKeys="true"(默认是false) keyProperty="id" 3: keyProperty 这个设置的是 你传入对象的属性名,不是你数据表的字段
星辰sea
2022/10/29
2.2K1
MyBatis在insert插入对象时,返回自增主键
浮点数
使用浮点类型可以表示带小数部分的数字,计算机将这样的值分为两部分存储,一部分表示值,一部分对值进行放大或缩小,比如3.1415926和31.415926 处了小数点位置不一样,其他都一样,可以将值表示为0.31415926 缩放因子为10 31.415926 缩放因子为100 只不过计算机存放缩放因子是二进制 因此是2的次幂 不是10
用户7272142
2023/10/11
2610
浮点数
非规则浮点数和规则浮点数
为了更好理解本文内容,可先行阅读《量化、数据类型、上溢和下溢》中内容。这里依旧将浮点数看作是一种量化方式,将连续的不可数的集合映射到有限的集合上去。本文结合单精度浮点数讨论,双精度浮点与之类似。
sea-wind
2019/07/31
2.3K0
非规则浮点数和规则浮点数
SpringMVC XStream 返回Xml时完美支持List,Map输出 顶
现支持,多种容器组合,无限循环嵌套,基本数据类型为null,则设置默认值,日期格式化。
linapex
2019/03/26
2.5K0
SpringMVC XStream 返回Xml时完美支持List,Map输出
                                                    顶
点击加载更多

相似问题

返回数组,ctype

12

如何从ctype读取返回指针的值?

116

正确地将ctype浮点数转换为python浮点数

21

从C++返回的多维数组在使用ctype时发送垃圾。

12

返回struct - 32位linux时ctype的Segfault

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文