假设IEEE-754一致性,当通过double传输时,float是否保证被保留?换句话说,是否总是满足以下断言?intmain(){floatf=some_random_float();assert(f==(float)(double)f);}假设f可以获取IEEE定义的任何特殊值,例如NaN和Infinity。根据IEEE的说法,是否存在这样的情况:assert会被满足,但在通过double传输后没有保留确切的位级表示?代码片段在C和C++中均有效。 最佳答案 您甚至不需要假设IEEE。C89在3.1.2.5中说:Thesetof
对于类型Tstd::is_floating_point::value是true,C++标准是否在T的方式上指定了任何内容?应该实现吗?例如,T甚至遵循符号/尾数/指数表示?还是可以完全任意? 最佳答案 来自N3337:[basic.fundamental/8]:Therearethreefloatingpointtypes:float,double,andlongdouble.Thetypedoubleprovidesatleastasmuchprecisionasfloat,andthetypelongdoubleprovides
对于类型Tstd::is_floating_point::value是true,C++标准是否在T的方式上指定了任何内容?应该实现吗?例如,T甚至遵循符号/尾数/指数表示?还是可以完全任意? 最佳答案 来自N3337:[basic.fundamental/8]:Therearethreefloatingpointtypes:float,double,andlongdouble.Thetypedoubleprovidesatleastasmuchprecisionasfloat,andthetypelongdoubleprovides
我看过很长的文章解释如何存储float以及这些数字的算术是如何完成的,但是请在我写的时候简要解释一下为什么cout我看到0.333333,但是当我写的时候cout我看到1。计算机是如何做到这一点的?请解释这个简单的例子。这对我来说已经足够了。 最佳答案 查看"Whateverycomputerscientistshouldknowaboutfloatingpointarithmetic"上的文章 关于c++-计算机如何进行浮点运算?,我们在StackOverflow上找到一个类似的问题:
我看过很长的文章解释如何存储float以及这些数字的算术是如何完成的,但是请在我写的时候简要解释一下为什么cout我看到0.333333,但是当我写的时候cout我看到1。计算机是如何做到这一点的?请解释这个简单的例子。这对我来说已经足够了。 最佳答案 查看"Whateverycomputerscientistshouldknowaboutfloatingpointarithmetic"上的文章 关于c++-计算机如何进行浮点运算?,我们在StackOverflow上找到一个类似的问题:
我有一个关于如何将基数为10的数字转换为IEEE754浮点表示的示例Number:45.25(base10)=101101.01(base2)Sign:0NormalizedformN=1.0110101*2^5Exponentesp=5E=5+127=132(base10)=10000100(base2)IEEE754:01000010001101010000000000000000这对我来说很有意义,除了一段:45.25(base10)=101101.01(base2)45是二进制的101101,这没关系..但是他们是如何获得0.25作为.01的? 最佳
我有一个关于如何将基数为10的数字转换为IEEE754浮点表示的示例Number:45.25(base10)=101101.01(base2)Sign:0NormalizedformN=1.0110101*2^5Exponentesp=5E=5+127=132(base10)=10000100(base2)IEEE754:01000010001101010000000000000000这对我来说很有意义,除了一段:45.25(base10)=101101.01(base2)45是二进制的101101,这没关系..但是他们是如何获得0.25作为.01的? 最佳
我发现floats的一个相当奇怪但有效的平方根近似值;我真的不明白。有人能解释一下为什么这段代码有效吗?floatsqrt(floatf){constintresult=0x1fbb4000+(*(int*)&f>>1);return*(float*)&result;}我已经测试了一下,itoutputsvaluesoffofstd::sqrt()byabout1to3%.我知道QuakeIII的fastinversesquareroot我猜这里是类似的东西(没有牛顿迭代),但我真的很感谢它是如何工作的的解释。(注意:我已将其标记为c和c++,因为它都是有效的(见注释)C和C++代码)
我发现floats的一个相当奇怪但有效的平方根近似值;我真的不明白。有人能解释一下为什么这段代码有效吗?floatsqrt(floatf){constintresult=0x1fbb4000+(*(int*)&f>>1);return*(float*)&result;}我已经测试了一下,itoutputsvaluesoffofstd::sqrt()byabout1to3%.我知道QuakeIII的fastinversesquareroot我猜这里是类似的东西(没有牛顿迭代),但我真的很感谢它是如何工作的的解释。(注意:我已将其标记为c和c++,因为它都是有效的(见注释)C和C++代码)
运行与IsdoubleMultiplicationBrokenin.NET?相关的快速实验并阅读了几篇关于C#字符串格式的文章,我认为:{doublei=10*0.69;Console.WriteLine(i);Console.WriteLine(String.Format("{0:F20}",i));Console.WriteLine(String.Format("+{0:F20}",6.9-i));Console.WriteLine(String.Format("={0:F20}",6.9));}将是此C代码的C#等效项:{doublei=10*0.69;printf("%f\n"