我需要在我的一个大气散射GLSL片段着色器中提高函数的精度,这个片段着色器计算单个光线和轴alignment的椭球之间的交点。 这是矿井大气散射着色器的核心function。 旧的原始着色器是在floats和正常渲染是好的,但增加缩放后,我发现,相对较小的距离精度丢失。 在浮标上,地球的可用距离只有0.005AU(天文单位)。 所以我试图移植的关键functiondouble ,这有助于现在可用的距离大约1.0 AU(具有小的文物) 这是Fragment Shader内部函数的double版本(旧式源代码使用不赞成的东西!!!) #extension GL_ARB_gpu_shader_fp64 : enable double abs(double x) { if (x<0.0) x=-x; return x; } // compute length of ray(p0,dp) to intersection with ellipsoid((0,0,0),r) -> view_depth_l0,1 // where rx is elipsoid rx^-2, ry = ry^-2 and rz=rz^-2 float view_depth_l0=-1.0,view_depth_l1=-1.0; bool _view_depth(vec3 _p0,vec3 _dp,vec3 _r) { double a,b,c,d,l0,l1; […]
>>> float(str(0.65000000000000002)) 0.65000000000000002 >>> float(str(0.47000000000000003)) 0.46999999999999997 ??? 这里发生了什么? 如何将0.47000000000000003转换为string,并将结果值返回为浮点型? 我在Windows上使用Python 2.5.4。
我有一个小问题,我找不到解决scheme! 我的代码是(这只是一个示例代码,但我的原始代码做这样的事情): float x = [@"2.45" floatValue]; for(int i=0; i<100; i++) x += 0.22; NSLog(@"%f", x); 输出是52.450001而不是52.450000! 我不知道,因为这发生! 感谢您的帮助! 〜〜解决 感谢大家! 是的,我已经解决了双重types!
我想知道是否有办法克服精度问题,这似乎是我的机器内部表示浮点数的结果: 为了清楚起见,这个问题总结为: // str is "4.600"; atof( str ) is 4.5999999999999996 double mw = atof( str ) // The variables used in the columns calculation below are: // // mw = 4.5999999999999996 // p = 0.2 // g = 0.2 // h = 1 (integer) int columns = (int) ( ( mw – ( h […]
我有一个非常烦人的问题,在Java中花了很长时间的花车或双打。 基本上这个想法是,如果我执行: for ( float value = 0.0f; value < 1.0f; value += 0.1f ) System.out.println( value ); 我得到的是: 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.70000005 0.8000001 0.9000001 我明白,浮动精度错误有一个积累,但是,如何摆脱这个? 我试图使用双打一半的错误,但结果仍然是一样的。 有任何想法吗?
根据这个java.sun页面 ==是Java中浮点数的等式比较运算符。 但是,当我input这个代码: if(sectionID == currentSectionID) 进入我的编辑器并运行静态分析,我得到:“JAVA0078浮点值与==相比较” 使用==来比较浮点值有什么问题? 什么是正确的方法来做到这一点?
看到这个代码: <html> <head> <script src="http://www.json.org/json2.js" type="text/javascript"></script> <script type="text/javascript"> var jsonString = '{"id":714341252076979033,"type":"FUZZY"}'; var jsonParsed = JSON.parse(jsonString); console.log(jsonString, jsonParsed); </script> </head> <body> </body> </html> 当我在Firefox 3.5中看到我的控制台时,jsonParsed的值是: Object id=714341252076979100 type=FUZZY 即数字四舍五入。 尝试不同的价值观,相同的结果(数字四舍五入)。 我也没有得到它的舍入规则。 714341252076979136四舍五入为714341252076979200,而714341252076979135四舍五入为714341252076979100。 编辑:请参阅下面的第一条评论。 显然这不是关于JSON,而是关于Javascript数字处理。 但问题依然存在: 为什么发生这种情况?
$a = '35'; $b = '-34.99'; echo ($a + $b); 结果为0.009999999999998 这是怎么回事? 我想知道为什么我的程序不断报告奇怪的结果。 为什么PHP不会返回预期的0.01?
我知道UIKit使用CGFloat是因为独立于坐标系的分辨率。 但每次我想检查是否例如frame.origin.x是0它使我感到不舒服: if (theView.frame.origin.x == 0) { // do important operation } 与== , <= , >= , < , >比较, CGFloat是否容易受到误报? 这是一个浮点,他们有无法解决的问题:例如, 0.0000000000041 。 Objective-C是在比较内部还是在内部处理这个问题,或者可能会发生这样的情况: origin.x读取为零,而不是与0比较为真?
你如何解释浮点不正确的新程序员和外行谁仍然认为电脑是无限的明智和准确? 你有没有一个最喜欢的例子或轶事,似乎是比精确,但干燥的解释更好的想法? 计算机科学课是如何教授的?