如您所知,浮点有一个精度问题,即值1将为0.9999999。lua在C中使用==来检查两个双数字是否相等。所以问题是:
a = 5.6
b = 14 * 0.4
print(a==b) ; => false
但更糟的是:
a = 1
...
if a < 1 then print("<1") end ; => sometimes a < 1
那我怎么才能避免这种情况?我查看了lua源代码,似乎可以在luaconf.h中修改luai_numeq/luai_numle)宏,但这有必要吗?
更新
第二个例子并不是真的正确。实际上,我的问题是,我将一个值
我刚开始学习c++,所以不确定评估的顺序。在下面的代码段中,你可以看到,当我计算C*(/i-i)行时,改变求值顺序会得到不同的结果,它给我-131213633,当我计算它为(行-i)/i *C时,它给我145422675。我理解在第一种情况下,这是一个溢出问题,但我想了解评估的顺序。
C = C * (line - i) / i ;
(gdb) p line
$1 = 31
(gdb) p i
$2 = 15
(gdb) p C
$3 = 145422675
(gdb) p C * (line - i) / i
$4 = -131213633
(gdb) p (line - i) / i *
有什么方法可以预先计算像5000000000000000000000这样的C++中的数字吗?我试过这个:
#include<iostream>
using namespace std;
int main()
{
unsigned long long int num1, num2;
num1 = 50000000000000000;
num2 = 50000000000000000;
cout << num1*num2;
}
有什么帮助吗?
我正在尝试在c++中运行这个算法,以便获得一个大数字
#include<iostream>
using namespace std;
int main()
{
int num,factorial=1;
cout<<" Enter Number To Find Its Factorial: ";
cin>>num;
for(int a=1;a<=num;a++)
{
factorial=factorial*a;
}
cout<<"Facto
given x=4 and y=1296;
we need to solve for z in z^x=y;
we can calculate z=6 in various ways;
问题是,如果y是一个大于10^100的非常大的数字,我如何找到z?我显然不能将这个数字存储为int,那么我该如何开始计算z呢?
实现C++会很好,如果不是这样,任何解决方案都可以。
我想在Python3中计算一个非常大的数的立方根。
我尝试了下面的函数,以及Python语法x ** (1 / n),但它们都产生了一个错误:
OverflowError: (34, 'Numerical result out of range')
我真的需要计算立方根来解决密码学中的一个问题。除了数学,我不能使用任何模块。
二进制搜索:
def find_invpow(x,n):
"""Finds the integer component of the n'th root of x,
an integer such that
给定一个函数f(N)=1^1*2^2*3^3.....N^N,我必须计算f(N)/f(r)*f(N-r)。下面给出了我的c代码,但它适用于小写N,如5或6。
#include<stdio.h>
unsigned long long power(long x, long y)
{
unsigned long long temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
ret
SITUATION
我需要为我的数学课做一个关于组合和排列的程序。如果您想要计算它们,您必须处理阶乘,我已经编写了这个典型的递归函数:
//TCombinazioni is a class that I have created to solve Combinations
function TCombinazioni.fattoriale(const x: integer): Int64;
begin
Result:= 1;
if x > 0 then
begin
Result:= fattoriale(x-1)*x;
end;
end;
问题
我在我的类TCom
我有这样的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(){
char name[]="g9.59e10.01024";
int a = atoi(&name[1]);
int b = atoi(&name[3]);
int c = atoi(&name[6]);
int d = c-2;
int e = pow(10,d);
int f = (100*a+b);
我用C++编写了一个简单的函数来计算具有长度、宽度和高度的Box对象的体积。这是类的一部分,所以l,b,h是私有成员:
long long CalculateVolume(){
return l*b*h;
}
对于大值的l,b,h,这是不正确的。就我而言,l = 1039, b = 3749, h = 8473。结果是
-1355615565
我以为这是溢出造成的,所以我试了一下
unsigned long long CalculateVolume(){
return l*b*h;
}
但结果是
18446744072353936051
最后,起作用的是将整数分
我试着处理C++中的大数字。我尝试过的一件事是安装gmp库,但它在我的计算机上不能正常工作(参见)。所以我想尝试另一个方法,那就是整数到字符串的转换。
但我不明白这点。让我说清楚。例如,我们处理一个大整数。比方说2^1000。例如,当我想计算2^1000 mod 10时,这在c++的普通库中是不可能的(据我所知)。因此,我的问题是:是否可能将整数转换为字符串,如果答案是肯定的:,当我将整数转换为字符串时,如何进行算术操作?
我用C、Perl和Python编写了一个简单的程序,它将一个变量递增到10亿。我没有想到不同的语言之间会有太大的差异,但我非常惊讶地看到了一个巨大的差异。这些程序简单地数到10亿:
在c中:
int main() {
int c = 0;
while (c < 1000000000) {
c++;
}
}
在Perl中:
#! /usr/bin/env perl
use strict;
use warnings;
my $x = 0;
while ($x < 1000000000) {
$x++;
}
在Python中:
#!/usr/bin/env
下面是我写的寻找第n个斐波那契数的代码:
unsigned long long fib(int n)
{
unsigned long long u = 1, v = 1, t;
for(int i=2; i<=n; i++)
{
t = u + v;
u = v;
v = t;
}
return v;
}
虽然算法运行得相当快,但当执行n>93时,输出开始变得异常。我认为/知道这是因为无符号的long long的64位大小。我刚接触C++,但是有没有办法绕过这个问题,这样我就可以得到像fib
当使用大整数操作时,Java和Javascript产生不同的结果。
示例: getCode(1747,1763,-268087281,348400)在Java中返回1921968083,而Javascript返回2.510115715670451e+22。
如何使用Javascript在Java中获得结果?
经过一些研究,这个问题似乎与有符号/无符号32/64位整数运算有关。我尝试将|0添加到所有操作中,并得到了更接近但不完全相同的1921618368。
Java:
public String getCode(int intVal1, int intVal2, int intVal3, int