我想要一个128位整数,因为我想存储两个64位数的乘法结果.在gcc 4.4及以上版本中有没有这样的东西?
我正在写一个视频游戏,Humm和Strumm,它需要在游戏引擎中使用网络组件.我可以很容易地处理字节序的差异,但是我试图处理可能的float内存格式时遇到了障碍.我知道现代计算机都有标准的整数格式,但我听说他们可能都不会将IEEE标准用于浮点整数.这是真的?
虽然我当然可以将它作为字符串输出到每个数据包中,但我仍然需要转换为每个客户端的"众所周知的格式",无论平台如何.标准printf()并且atod()不够.
请注意,因为这个游戏是一个可以在GNU/Linux,*BSD和Microsoft Windows上运行的免费/开源软件程序,所以我不能使用任何专有解决方案,也不能使用任何单平台解决方案.
干杯,
帕特里克
我在函数指针方面遇到了一些困难.我有一个基类,它定义了一个函数指针,通过typedef double(*function)(double*x)const;
一个快速的问题:为什么上面的typedef不能编译?
给出以下错误:错误:'function'上的'const'和'volatile'函数说明符在类型声明中无效
对于下面的部分,我使用typedef double(*function)(double*x).现在每个子类都可以实现这种类型的多个不同版本的函数.通过枚举我选择我选择的函数,它将我的非成员函数指针(在基类中定义)设置为由子类的这些成员函数指针之一初始化.这是一段代码片段:
子类的源文件:
PndLmdROOTDataModel1D::PndLmdROOTDataModel1D(interpolation_type intpol_type) {
if(intpol_type == CONSTANT) {
setModelFunction(&PndLmdROOTDataModel1D::evaluateConstant);
}
else if (intpol_type == SPLINE) {
setModelFunction(&PndLmdROOTDataModel1D::evaluateSpline);
}
else {
setModelFunction(&PndLmdROOTDataModel1D::evaluateLinear);
}
}
Run Code Online (Sandbox Code Playgroud)
和基类(头文件):
class MultiModel1D: public Model1D {
protected:
function model_func;
public:
MultiModel1D();
virtual ~MultiModel1D();
void setModelFunction(function f);
}
Run Code Online (Sandbox Code Playgroud)
编译时我收到以下错误:
注意:参数1从'double(PndLmdROOTDataModel1D ::*)(double*)'到'function {aka double(*)(double*)}'没有已知的转换
我正在使用函数指针,因为速度问题(至少我认为这应该比不断运行某些开关案例更快).我究竟做错了什么?也许还有一些设计模式可以作为更好的选择...提前感谢!
史蒂夫
后续问题是: 如何检测非 IEEE-754 浮点,以及如何使用它们?
理论上,我们可以假设 c float 总是支持负数吗?