众所周知,在C中,浮点文字(例如1.23)具有类型double.因此,任何涉及它们的计算都会提升到两倍.
我正在研究一个嵌入式实时系统,它有一个浮点单元,只支持单个precision(float)数字.我的所有变量都是float,这个精度就足够了.我根本不需要(也买不起)double.但每次都喜欢
if (x < 2.5) ...
Run Code Online (Sandbox Code Playgroud)
写的,灾难发生:减速可以达到两个数量级.当然,直接的答案是写
if (x < 2.5f) ...
Run Code Online (Sandbox Code Playgroud)
但这很容易被遗漏(并且直到太晚才难以发现),尤其是当一个"配置"值被#define一个不那么自律(或刚刚开发)的开发人员放在一个单独的文件中时.
那么,有没有办法强制编译器将所有(浮点)文字视为float,就像使用后缀一样f?即使它违反了规范,我也不在乎.或任何其他解决方案?顺便说一句,编译器是gcc.
这是用C计算数组长度的众所周知的代码:
sizeof(array)/sizeof(type)
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找出作为函数参数传递的数组的长度:
#include <stdio.h>
int length(const char* array[]) {
return sizeof(array)/sizeof(char*);
}
int main() {
const char* friends[] = { "John", "Jack", "Jim" };
printf("%d %d", sizeof(friends)/sizeof(char*), length(friends)); // 3 1
}
Run Code Online (Sandbox Code Playgroud)
我假设数组通过值复制到函数参数作为常量指针,并且对它的引用应解决此问题,但此声明无效:
int length(const char**& array);
Run Code Online (Sandbox Code Playgroud)
我发现将数组长度作为第二个参数传递为冗余信息,但为什么标准声明main如下:
int main(int argc, char** argv);
Run Code Online (Sandbox Code Playgroud)
请解释是否可以在函数参数中找出数组长度,如果是,那么为什么存在冗余main.
我试图在端口号绑定我的套接字(服务器套接字)8000.它起作用并为我做了工作.在代码的最后我也关闭了套接字.在下一刻我再次运行我的代码,它向我显示该地址已被使用.我已经打印了错误值的含义,strerror(errno);以查看我的代码是否在每个点都正常工作.要检查端口是否空闲,我使用了netstat它,但它显示端口号8000是免费的.它发生在我身上很多次.每次我等待几秒钟然后它再次开始工作.我正在使用c语言.那么我的操作系统对于这种行为的原因是什么?
再过几秒钟后,我运行代码然后就可以了.
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ sudo ./a.out
Socket Creation: Success
File open: Success
Socket Bind: Address already in use
Socket Listen: Address already in use
^C
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ sudo netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1348/lighttpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 984/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1131/cupsd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1211/mysqld
tcp6 …Run Code Online (Sandbox Code Playgroud) 我确定之前已经解决了1000次:我得到了一个960*560大小的画布和一个大小为5000*3000的房间,其中应该只画出960*560,这取决于玩家的位置.玩家应该始终位于中间,但是当接近边界时 - 应该计算最佳视图).玩家可以使用WASD或箭头键完全免费移动.并且所有物体都应该自己移动 - 而不是我移动除了玩家之外的所有其他东西以创造玩家移动的幻觉.
我现在发现了这两个问题:
HTML5 - 为画布创建一个视口,但仅适用于此类游戏,我无法重现我的代码.
更改html5画布的视图"中心"似乎更有前途,也更有说服力,但我只是理解它相对于播放器正确绘制所有其他对象而不是如何相对于播放器滚动画布视口,我想要当然要先实现.
我的代码(简化 - 游戏逻辑是单独的):
var canvas = document.getElementById("game");
canvas.tabIndex = 0;
canvas.focus();
var cc = canvas.getContext("2d");
// Define viewports for scrolling inside the canvas
/* Viewport x position */ view_xview = 0;
/* Viewport y position */ view_yview = 0;
/* Viewport width */ view_wview = 960;
/* Viewport height */ view_hview = 560;
/* Sector width */ room_width = 5000;
/* Sector height */ room_height = 3000;
canvas.width …Run Code Online (Sandbox Code Playgroud) 是否有可能在matplotlib中获得超过9个子图?
我在subplots命令pylab.subplot(449);,我怎么能得到一个4410工作?
非常感谢你.
我想展示一个带有ng-show显示内容的灯箱,但我不知道如何触发灯箱JS.我正在寻找类似的东西
ng-on-show="showLightbox()"
Run Code Online (Sandbox Code Playgroud) 事实证明,对open()与fopen()的整体误解源于ARM上Linux 2.6.14内核中的错误I2C驱动程序.向后移动一个工作位捣乱的驱动程序解决了我试图解决的问题的根本原因.
我试图弄清楚Linux(I2C)中串行设备驱动程序的问题.似乎通过在设备上的写入和读取之间添加定时OS暂停(休眠),事情起作用......(更好).
旁白:I2C的本质是主机读取或写入的每个字节都由线路另一端的设备(从机)确认 - 暂停改进的事情鼓励我将驱动程序视为异步工作 - 这是我的意思无法调和公交车的运作方式.Anyhoo ......
我想无论是想刷新写可以肯定(而不是使用固定的工期暂停),或以某种方式测试读/写事务已完成在多线程友好的方式.
使用的麻烦fflush(fd);是它需要'fd'是流指针(不是文件描述符),即
FILE * fd = fopen("filename","r+");
... // do read and writes
fflush(fd);
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要使用,ioctl()而不使用流指针.即
int fd = open("filename",O_RDWR);
ioctl(fd,...);
Run Code Online (Sandbox Code Playgroud)
建议?
我一直在使用PostgreSQL,现在正在迁移到MySQL.
在我的疑问,我使用的PostgreSQL的SELECT DISTINCT ON (col1, col2, col3),我想知道是否有这说法的任何对应的MySQL.