我在JDK版本1.7.0_60上运行以下代码: System.out.println(Math.pow(1.5476348320352065, (0.3333333333333333))); 其结果是:1.1567055833133086 我在JDK版本1.7.0上运行完全相同的代码。 其结果是:1.1567055833133089 我明白,double不是无限精确的,但是java规范中的变化是否会导致差异? PS:因为我们使用遗留系统,大十进制不是一个选项。 编辑:我能够追踪更改的时间:它是在JDK版本1.7.0_40中引入的(与版本1.7.0_25相比)。
这里发生了什么: #include <stdio.h> #include <math.h> int main(void) { printf("17^12 = %lf\n", pow(17, 12)); printf("17^13 = %lf\n", pow(17, 13)); printf("17^14 = %lf\n", pow(17, 14)); } 我得到这个输出: 17^12 = 582622237229761.000000 17^13 = 9904578032905936.000000 17^14 = 168377826559400928.000000 13和14不匹配wolfram alpa cf: 12: 582622237229761.000000 582622237229761 13: 9904578032905936.000000 9904578032905937 14: 168377826559400928.000000 168377826559400929 而且,一些奇怪的部分并没有错,只有一个是错的! 如果这是我达到pow()可以为我做的极限,是否有一个替代scheme可以计算出来? 我需要一个可以计算x^y的函数,其中x^y总是小于ULLONG_MAX。
我最近很快学习,但我有一个基本的问题,无法find答案 我想得到类似的东西 var a:Int = 3 var b:Int = 3 println( pow(a,b) ) // 27 但pow函数只能使用double数字,它不能和integer一起工作,我甚至不能使用double(a)或a.double()等方法来将int转换为double。 为什么它不提供整数的力量? 它肯定会返回一个整数没有歧义! 为什么我不能将一个整数转换为双精度? 它只是改变3到3.0(或者30000 …不pipe) 如果我有两个整数,我想做功率操作,我该怎么做顺利? 谢谢!
我在C中使用pow函数,并将返回值存储在整数types中。 看下面的代码片段: for (i = 0; i < 5; i++){ val = (int)pow(5, i); printf("%d, ", val); } 这里i和val是整数,输出是1, 5, 24, 124, 624 。 我相信这是因为一个浮点数25被视为24.99999 …被分配到一个整数四舍五入到24。 我怎么能通过这个如果我仍然需要存储返回值在一个int?
我正在寻找一个有效的方法来计算b (比如a = 2和b = 50)。 为了开始,我决定看看Math.Pow()函数的实现。 但在.NETreflection器 ,我发现是这样的: [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical] public static extern double Pow(double x, double y); 当我调用Math.Pow()函数时,我可以看到里面发生了什么的一些资源是什么?
运行以下代码行时: int i,a; for(i=0;i<=4;i++) { a=pow(10,i); printf("%d\t",a); } 我很惊讶地看到输出结果是1 10 99 1000 9999而不是1 10 100 1000 10000 。 可能的原因是什么? 注意 如果你认为这是一个浮点错误,在上面的for循环中,当i = 2 ,存储在variablesa的值是99 。 但是,如果你写,而不是 a=pow(10,2); 现在的价值出来是100 。 这怎么可能?