Tag: 浮点

Python的浮点任意精度可用?

只是为了好玩,因为这很简单,我写了一个简短的程序来生成嫁接数字 ,但是由于浮点精度问题,没有find一些更大的例子。 def isGrafting(a): for i in xrange(1, int(ceil(log10(a))) + 2): if a == floor((sqrt(a) * 10**(i-1)) % 10**int(ceil(log10(a)))): return 1 a = 0 while(1): if (isGrafting(a)): print "%d %.15f" % (a, sqrt(a)) a += 1 这段代码错过了至less一个已知的嫁接号码。 9999999998 => 99999.99998999999999949999999994999999999374999999912…乘以10**5后似乎降低了额外的精度。 >>> a = 9999999998 >>> sqrt(a) 99999.99999 >>> a == floor((sqrt(a) * 10**(5)) % 10**int(ceil(log10(a)))) […]

使用==运算符比较float / double值

当我开始使用相等运算符来比较两个浮点值时,我使用的代码审查工具与下面的投诉。 什么是正确的方法和如何做到这一点? 是否有帮助function(commons- *)在那里,我可以重用? 描述 无法使用equals(==)运算符比较浮点值 说明 通过使用等号(==)或不等号(!=)运算符比较浮点值并不总是准确的,因为舍入错误。 build议 比较两个浮点值,看它们是否接近值。 float a; float b; if(a==b) { .. }

如何检查一个string是可parsing的双?

有没有一个本地的方式(最好不执行自己的方法)来检查一个string是可以用Double.parseDouble()parsing?

在C#中输出格式化双打

运行相关的快速实验是在.NET中的双重乘法损坏? 并阅读了一些关于C#string格式的文章,我认为这是: { double i = 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代码: { double i = 10 * 0.69; printf ( "%f\n", i ); printf ( " %.20f\n", i ); printf ( "+ %.20f\n", 6.9 – i ); printf ( "= %.20f\n", 6.9 ); […]

约翰·卡马克(John Carmack)的不寻常的快速反平方根(Quake III)

John Carmack在Quake III源代码中有一个特殊的function,它可以计算浮点的平方根,比常规(float)(1.0/sqrt(x))快4倍,包括一个奇怪的0x5f3759df常量。 请参阅下面的代码。 有人可以一行一行地解释这里究竟发生了什么,为什么这个工作比常规的实现要快得多? float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df – ( i >> 1 ); y = * ( float * ) &i; y […]

浮点比较问题

void main() { float f = 0.98; if(f <= 0.98) printf("hi"); else printf("hello"); getch(); } 我在这里得到这个问题。使用不同的浮点值得到不同的结果。 为什么发生这种情况?

如何获得浮点数的符号,尾数和指数

我有一个程序,它运行在两个处理器上,其中一个没有浮点支持。 所以,我需要在该处理器中使用固定点执行浮点计算。 为此,我将使用浮点模拟库。 我需要首先提取处理器上浮点数的符号,尾数和指数。 所以,我的问题是如何获得单精度浮点数的符号,尾数和指数。 按照这个图的格式, 这是我迄今为止所做的,但除了符号,尾数和指数都是正确的。 我想,我错过了一些东西。 void getSME( int& s, int& m, int& e, float number ) { unsigned int* ptr = (unsigned int*)&number; s = *ptr >> 31; e = *ptr & 0x7f800000; e >>= 23; m = *ptr & 0x007fffff; }

Python float – str – 漂浮奇怪

>>> float(str(0.65000000000000002)) 0.65000000000000002 >>> float(str(0.47000000000000003)) 0.46999999999999997 ??? 这里发生了什么? 如何将0.47000000000000003转换为string,并将结果值返回为浮点型? 我在Windows上使用Python 2.5.4。

为什么我不能使用float值作为模板参数?

当我尝试使用float作为模板参数时,编译器为此代码而哭泣,而int工作正常。 是否因为我不能使用float作为模板参数? #include<iostream> using namespace std; template <class T, T defaultValue> class GenericClass { private: T value; public: GenericClass() { value = defaultValue; } T returnVal() { return value; } }; int main() { GenericClass <int, 10> gcInteger; GenericClass < float, 4.6f> gcFlaot; cout << "\n sum of integer is "<<gcInteger.returnVal(); cout << "\n sum […]

检查浮点值是否等于0是否安全?

我知道你不能依赖于正常的双或十进制types值之间的平等,但我想知道如果0是一个特例。 虽然我可以理解0.00000000000001和0.00000000000002之间的不精确性,0本身似乎很难搞乱,因为它只是一无所获。 如果你什么都不准确,那不是什么了。 但是我不太了解这个话题,所以我不能说。 double x = 0.0; return (x == 0.0) ? true : false; 这将永远回报真实?