2014-06-08 24 views
5

Biri bir programlama yarışması bu soru soruldu: -kullanma modülü operatör

-1% 1000000009 -1 veya 1000000008 Bilmek istiyorum

, bu mümkün mü? Sistemimde denedim, her seferinde -1 aldım. Ayrıca, 10^-9% 10^9'u bulmak zorundaydım, fmod kullandım ve 1e-009 cevabını aldım, 1 olmalıydı?

Benim çevirim: - 10^-9/10^9 = 1/10^18 Yanlış nerede Yani, cevap =

1. söyle.

+0

'fmod' sorusuna gelince: [Her Programcının Kayan Nokta Aritmetiği Hakkında Bilmesi Gerekenler] (http://floating-point-gui.de). – usr2564301

+1

@Jongware Bir program yazıyorum, bu yüzden programın içinde neler olduğuna dair net bir görüşe ihtiyacım var. Bu yardımcı olmuyor. Başka yardım var mı? – unixia

+1

'%' kayan nokta operatörü değil –

cevap

3

önizleme: (i % olarak mod sevk edecektir)

Sadece 1%3 gibi

, yapmamız (int) 1/30, sonra biz sormak hangi: kaç 1 almak için eklenir?

cevap çok 1.

1%3=1 olduğunu.

2^-3/2^3 = 1/(2^3 * 2^3) = 1/64

:

2^-3 % 2^3

öncelikle sapmanın tamsayı değeri kalk:


netlik için, en başka numaralar kullanmasına izin 10^-9 % 10^9

baktığımızdabunu az sayıda

var görebileceğiniz şekilde int parçası

0. böyledir - kaç 2^-3 almak için eklenir? 10^-9/10^9 = 1/10^18 Yani, cevap = 1.

-:

Benim çevirim: istediğiniz konuyla ilgili 2^-3


: bu doğru

1/10^18 gerçekten de.

Tamsayı bölümü nedir? sıfır.

bu sıfırdan, -1'a gitmek için eklememiz gereken nedir?

yup, -1.

sadece Modulo kurallarına uyun.

İlk olarak tamsayı sapmasını bulun. ve sonra sor: pay almak için ne kadar eklememiz gerekir.bir durum payı> paydası

7 % 5 = > 7 /5 => 1.4 => .4 go to hell = > you're left with 1.

ama haber için

:

düzenlemek

. 7'den gitmek için ne kadar -

bu 1 kez 5 ila yani Tamam 1 kez 5.

mı? evet: 2.

daha gelişmiş:

3.111 %2 = > 3.111/2 = > 1.5555 => .555 go to hell => you're left with 1.

ama 2 1 zamanlardan bu yüzden 2.

1 kez - bu 3.111 gitmek için ne kadar? yup 1.111

+0

Her durumda, paylaştırıcının bir kayan nokta ve paydası tamsayı tipi ve kayan noktadan oldukça büyük olduğu anlamına gelir mi, yanıt yalnızca yüzer (başlangıçta pay) olur mu? – unixia

+0

@ user3715736, payda portakal ile yüzer ve payda tamsayıları olan elmalara sahip olsa bile: önce (!) Sonucun iteer kısmını alırsınız (!) Böylece '2.111% 3 => 2.111/3 => 0.7033 =>. 7033 cehenneme git => 0 => ile kalıyorsun, bu yüzden 2.111'e ne kadar ihtiyacımız var? 2.111' –

+1

'%', kayan nokta türleriyle çalışmaz. “3.111% 2' –