floating-point-conversion
全部标签 我刚接触C语言,想请教一个问题。此处的整数i转换为float,然后f(以某种方式)成功表示5.0:inti=5;floatf=i;//Somethinghappenedhere...但是如果我们尝试这种方法:inti=5;floatf=*(float*)&i;f不会得到5.0,因为它以“float方式”解释存储在i中的位。那么编译器在第一种情况下实际上做了什么魔术呢?这似乎是一项相当费力的工作......有人可以具体说明吗?谢谢。 最佳答案 这是一项费力的工作,但任何支持float的CPU都会提供执行此操作的指令。如果您必须自己将2
我有一个关于使用ostringstream从float到C++字符串的转换的问题。这是我的台词:voiddoSomething(floatt){ostringstreamstream;stream当t的值为-0.89999时,它会四舍五入为-0.9,但当它的值为0.0999或小于1.754e-7时,它只会打印而不会四舍五入。有什么解决方案。 最佳答案 您需要使用precision设置ostringstream的精度例如stream.precision(3);stream 关于c++-用o
在C++中有没有一种方法可以构造一个float组来初始化它的值?例如,我这样做:float*new_arr=newfloat[dimension];for(unsignedinti=0;i是否可以在施工期间进行分配? 最佳答案 float*new_arr=newfloat[dimension](); 关于c++-在构造时初始化一个float组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest
C++:float的printf()格式规范是什么?(视觉C++)以前我是用%g来表示float,用%lg来表示double。看起来规范已更改,float未定义,double为%g。我正在打印出内存中的一些位,因此无法进行转换。有没有一种方法可以使用printf()打印出float值?更新:此代码是为对嵌入式系统上使用的通用C++库进行单元测试而编写的。这是我必须做的才能让float工作。代码在模板函数中:templateErrortestMatrixT(){...这是一个代码片段:if(typeid(Ttyp)==typeid(float)){float64c=*(float32*)
所以我有数兆字节的数据存储为需要通过网络发送的double...现在我不需要double提供的精度,所以我想在通过网络发送它们之前将它们转换为float网络。简单做的开销是多少:floatmyFloat=(float)myDouble;我将每隔几秒执行此操作数百万次,并且不想减慢任何速度。谢谢编辑:我的平台是带有VisualStudio2008的x64。编辑2:我无法控制它们的存储方式。 最佳答案 正如MichaelBurr所说,虽然开销在很大程度上取决于您的平台,但开销肯定少于通过网络发送它们所需的时间。粗略估计:800MBit/
gcc的__float128float的算术运算是否考虑了当前的舍入模式?例如,如果使用C++11函数std::fesetenv,我将舍入模式更改为FE_DOWNWARD,将对进行算术运算的结果__float128向下舍入?这是否由__float128规范保证? 最佳答案 我相信保证__float128上的操作考虑了舍入模式。根据GNUC库文档,浮点计算遵循舍入模式。根据GCC手册__float128是一个支持除法等算术运算的浮点类型。据此我推断,对于__float128的操作,必须考虑舍入模式。GNUC库文档指出:20.6Roun
我是一个图书馆的开发人员,我们的旧代码使用sscanf()和sprintf()从字符串读取/写入各种内部类型。与使用我们的库且其语言环境与我们基于XML文件的语言环境(“C”语言环境)不同的用户遇到了问题。在我们的例子中,这导致从这些XML文件解析出的值不正确,并且在运行时以字符串形式提交了这些值。用户可以直接更改语言环境,但也可以在用户不知情的情况下更改语言环境。如果语言环境更改发生在另一个库(例如GTK)中,而该库是一个错误报告中的“肇事者”,则可能会发生这种情况。因此,我们显然希望从语言环境中删除任何依赖关系,以使自己永久摆脱这些问题。我已经阅读了关于float/double/i
我正在尝试使用ifstream从.out文件中读取一系列float,但如果我之后输出它们,它们就不正确了。这是我的输入代码:floatx,y,z;ifstreamtable;table.open("Resources/bones.out");if(table.fail()){cout>x;table>>y;table>>z;cout我的输入文件:0.4884540.5102160.4669790.4872420.4213470.4729770.4867730.3712510.473103...现在进行测试,我只是将第一行读入xy和z,我的输出是102关于为什么我没有得到正确的输出有什么
这对我来说真的是一个奇怪的错误,我花了很长时间才弄清楚发生了什么。为了简化事情和重现,只需使用VS2005创建一个空的win32控制台应用程序并在main方法中使用此代码:floata=411.00418f;floatb=1.0f;floatc=0.076279849f;unsignedshortresult=(unsignedshort)((a-b)/c);unsignedshortresult2=(unsignedshort)((float)((a-b)/c));//Debug:5374,5375//Release:5374,5374printf("%d,%d\n",result,
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我需要存储大约-10000到10000范围内的值。在范围边界,所需的精度不是很高(可能大约64,我会看看它如何适合),精度需要在零附近1或更好。不幸的是空间非常有限,不超过12位,越少越好。所以严格来说,即使halffloats出局。是否有一个开源库可以处理一些尾数和指数长度很短的非常短的浮点格式?像8位尾数和3位指数。只需要从/到更大格式的转换,不进行任何算术运算。