floating-point-conversion
全部标签 下面的代码通过一些位黑客来执行快速的平方根逆运算。该算法可能是由SiliconGraphics在1990年代早期开发的,它也出现在Quake3中。moreinfo但是,我从GCCC++编译器得到以下警告:取消引用类型双关指针会破坏严格别名规则在这种情况下我应该使用static_cast、reinterpret_cast还是dynamic_cast?floatInverseSquareRoot(floatx){floatxhalf=0.5f*x;int32_ti=*(int32_t*)&x;i=0x5f3759df-(i>>1);x=*(float*)&i;x=x*(1.5f-xhalf
根据thisjava.sunpage==是Java中float的相等比较运算符。但是,当我输入此代码时:if(sectionID==currentSectionID)进入我的编辑器并运行静态分析,我得到:“JAVA0078与=="比较的浮点值使用==比较浮点值有什么问题?正确的方法是什么? 最佳答案 测试float是否相等的正确方法是:if(Math.abs(sectionID-currentSectionID)其中epsilon是一个非常小的数字,例如0.00000001,具体取决于所需的精度。
如何将float转换为字符串或字符串转换为float?在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算的浮点值之间进行断言。StringvalueFromTable="25";FloatvalueCalculated=25.0;我试过从float到字符串:StringsSelectivityRate=String.valueOf(valueCalculated);但断言失败 最佳答案 使用Java的Float类。floatf=Float.parseFloat("25");Strings=Float.toString(2
double值存储更高的精度并且是float的两倍,但英特尔CPU是否针对float进行了优化?也就是说,double运算与+、-、*和/的浮点运算一样快还是更快?64位架构的答案会改变吗? 最佳答案 没有一个单一的“英特尔CPU”,尤其是在哪些操作相对于其他人进行了优化方面!但其中大多数在CPU级别(特别是在FPU内)是这样的问题:aredoubleoperationsjustasfastorfasterthanfloatoperationsfor+,-,*,and/?是"is"--在CPU内,除了除法和sqrt是somewhat
假设我有以下内容:inti=23;floatf=3.14;if(i==f)//dosomethingi将被提升为float并且两个float数字将被比较,但是float代表所有int值?为什么不将int和float都提升为double? 最佳答案 当int晋升为unsigned在积分促销中,负值也丢失了(这导致了0u这样的乐趣为真)。与C中的大多数机制(在C++中继承)一样,通常的算术转换应该根据硬件操作来理解。C的制造者非常熟悉他们所使用的机器的汇编语言,他们编写C是为了让他们自己和喜欢自己的人在编写在此之前都用汇编语言编写的东西
如果我写:intx=/*anynon-zerointegervalue*/;floaty=x;floatz=y/y;z是否保证正好是1.f? 最佳答案 如果您的C++实现使用IEEE754,那么可以,这是有保证的。(除法运算符需要返回可能的最佳浮点值)。只有y/y的异常(exception),一般来说,不是1.f的情况是y是NaN、+Inf、-Inf、0.f和-0。f,或者如果你在一个平台上int太宽以至于它的某些实例不能在没有floatfloat中表示被设置为+Inf或-Inf1。撇开最后一点,在您的情况下,这意味着intx=0;
在C++中使用一种代替另一种的优点和缺点是什么? 最佳答案 如果你想知道真正的答案,你应该阅读WhatEveryComputerScientistShouldKnowAboutFloating-PointArithmetic.简而言之,虽然double在其表示中允许更高的精度,但对于某些计算,它会产生更大的错误。“正确”的选择是:使用尽可能多的精度,但不要更多并选择正确的算法。无论如何,许多编译器都在“非严格”模式下进行扩展float学运算(即使用硬件中可用的更广泛的浮点类型,例如80位和128位浮点),这也应该被考虑在内。在实践中
如何对float或double的绝对最大值或最小值进行硬编码?我想通过简单地迭代并捕获最大的数组来搜索数组的最大值/最小值。float也有正无穷和负无穷,我应该用它们来代替吗?如果是这样,我如何在我的代码中表示? 最佳答案 您可以使用std::numeric_limits在中定义找到类型的最小值或最大值(只要该类型存在特化)。您还可以使用它来检索无穷大(并将-放在前面以获得负无穷大)。#include//...std::numeric_limits::max();std::numeric_limits::min();std::num
这个问题在这里已经有了答案:Ifoperator(5个回答)关闭9年前。让:doubled=0.1;floatf=0.1;应该表达(f>d)返回true还是false?根据经验,答案是true。但是,我希望它是false。由于0.1不能完美地用二进制表示,而double有15到16十进制数字精度,而float只有7。因此,它们都小于0.1,而double更接近0.1。我需要对true的确切解释。 最佳答案 我想说答案取决于将double转换为float时的舍入模式。float有24位binary位精度,而double有53位。在二进
我知道您可以使用将float转换为字符串NSString*myString=[NSStringstringWithFormat:@"%f",myFloat];我的问题是Objective-C中还有哪些其他方法可以做到这一点?谢谢。 最佳答案 您可以使用NSNumberNSString*myString=[[NSNumbernumberWithFloat:myFloat]stringValue];但是按照你的方式去做是没有问题的,事实上你在你的问题中的方式更好。 关于iphone-Obje